如何在C中检查输入是否为数字?

在C的主要function:

void main(int argc, char **argv) { // do something here } 

在命令行中,我们将输入任何数字,例如12作为输入,但它将被视为argv参数的char数组,但如果输入是一个数字,以防人们键入helloc

另一种方法是使用isdigit函数。 以下是它的代码:

 #include  #include  #include  #include  #define MAXINPUT 100 int main() { char input[MAXINPUT] = ""; int length,i; scanf ("%s", input); length = strlen (input); for (i=0;i 

您可以使用像strtol()这样的strtol()将字符数组转换为long。

它有一个参数,用于检测未正确转换的第一个字符。 如果这不是字符串结尾,那么你就有问题了。

有关示例,请参阅以下程序:

 #include  #include  int main( int argc, char *argv[]) { int i; long val; char *next; // Process each argument given. for (i = 1; i < argc; i++) { // Get value with failure detection. val = strtol (argv[i], &next, 10); // Check for empty string and characters left after conversion. if ((next == argv[i]) || (*next != '\0')) { printf ("'%s' is not valid\n", argv[i]); } else { printf ("'%s' gives %ld\n", argv[i], val); } } return 0; } 

运行它,你可以在运行中看到它:

 pax> testprog hello "" 42 12.2 77x 'hello' is not valid '' is not valid '42' gives 42 '12.2' is not valid '77x' is not valid 

使用scanf非常简单,这是一个例子:

 if (scanf("%d", &val_a_tester) == 1)) { ... // it's an integer } 

自制解决方案:

 bool isNumeric(const char *str) { while(*str != '\0') { if(*str < '0' || *str > '9') return false; str++; } return true; } 

请注意,此解决方案不应在生产代码中使用,因为它具有严重的限制。 但我喜欢它来理解C-Strings和ASCII。

使用相当简单的代码:

 int i; int value; int n; char ch; /* Skip i==0 because that will be the program name */ for (i=1; i 

sscanf()解决方案在代码行方面更好。 我的答案是用户构建函数,它与sscanf()几乎相同。 将转换后的数字存储在指针中,并返回一个名为“val”的值。 如果val出现为零,则输入的格式不受支持,因此转换失败。 因此,仅当val非零时才使用指针值。

仅当输入为基本10forms时才有效。

 #include  #include  int CONVERT_3(double* Amt){ char number[100]; // Input the Data printf("\nPlease enter the amount (integer only)..."); fgets(number,sizeof(number),stdin); // Detection-Conversion begins int iters = strlen(number)-2; int val = 1; int pos; double Amount = 0; *Amt = 0; for(int i = 0 ; i <= iters ; i++ ){ switch(i){ case 0: if(number[i]=='+'){break;} if(number[i]=='-'){val = 2; break;} if(number[i]=='.'){val = val + 10; pos = 0; break;} if(number[i]=='0'){Amount = 0; break;} if(number[i]=='1'){Amount = 1; break;} if(number[i]=='2'){Amount = 2; break;} if(number[i]=='3'){Amount = 3; break;} if(number[i]=='4'){Amount = 4; break;} if(number[i]=='5'){Amount = 5; break;} if(number[i]=='6'){Amount = 6; break;} if(number[i]=='7'){Amount = 7; break;} if(number[i]=='8'){Amount = 8; break;} if(number[i]=='9'){Amount = 9; break;} default: switch(number[i]){ case '.': val = val + 10; pos = i; break; case '0': Amount = (Amount)*10; break; case '1': Amount = (Amount)*10 + 1; break; case '2': Amount = (Amount)*10 + 2; break; case '3': Amount = (Amount)*10 + 3; break; case '4': Amount = (Amount)*10 + 4; break; case '5': Amount = (Amount)*10 + 5; break; case '6': Amount = (Amount)*10 + 6; break; case '7': Amount = (Amount)*10 + 7; break; case '8': Amount = (Amount)*10 + 8; break; case '9': Amount = (Amount)*10 + 9; break; default: val = 0; } } if( (!val) | (val>20) ){val = 0; break;}// val == 0 } if(val==1){*Amt = Amount;} if(val==2){*Amt = 0 - Amount;} if(val==11){ int exp = iters - pos; long den = 1; for( ; exp-- ; ){ den = den*10; } *Amt = Amount/den; } if(val==12){ int exp = iters - pos; long den = 1; for( ; exp-- ; ){ den = den*10; } *Amt = 0 - (Amount/den); } return val; } int main(void) { double AM = 0; int c = CONVERT_3(&AM); printf("\n\n%d %lf\n",c,AM); return(0); }