为什么这些完全相似的代码不起作用?

Why do these perfectly similiar codes not work?

我正在学习 C++ 中的函数,我在 Tutorialspoint 上看到了这段代码,它告诉我们是否 输入是一个整数或一个字符串。

Link 到 Tutorialspoint 文章:https://www.tutorialspoint.com/cplusplus-program-to-check-if-input-is-an-integer-or-a-string

这是原代码:

#include <iostream>
using namespace std;
//check if number or string
bool check_number(string str) {
   for (int i = 0; i < str.length(); i++)
   if (isdigit(str[i]) == false)
      return false;
      return true;
}
int main() {
   string str = "sunidhi";
   if (check_number(str))
      cout<<str<< " is an integer"<<endl;
   else
      cout<<str<< " is a string"<<endl;
      string str1 = "1234";
   if (check_number(str1))
      //output 1
      cout<<str1<< " is an integer";
   else
      //output 2
      cout<<str1<< " is a string";
}

原来的工作得很好,但我的代码要么只显示输出 1,要么只显示输出 2,无论你输入一个 int 还是一个字符串。

我的代码:

注意:我的代码是在在线编译器上编写的。 Link 给编译器:https://www.onlinegdb.com

#include <iostream>
using namespace std;
//the function which checks input
bool check(string s){
    for(int i = 0; i < s.length(); i++)
    if(isdigit(s[i]) != true)
    return false;

return true;     
    
}
//driver code
int main(){
    string str = "9760";
    if(check(str)){
        //output 1
        cout<<"Thanks! the word was " <<str;
    }
    else{
        //output 2
        cout<<"Oops! maybe you entered a number!";
    }
}    

执行我的程序时的输出:Thanks! the word was 9760

Link 到代码项目:https://onlinegdb.com/HkcWVpFRU

谢谢!

您正在检查该字符是否为数字,如果是则返回 false,您应该将其更改为

bool check(string s){
    for(int i = 0; i < s.length(); i++)
        if(isdigit(s[i])
           return false;
return true;     
}

旁注,如果你想检查错误,你可以 (!bool) 而不是 (bool != true) 它看起来更干净