bool isNumber(char *input) {
for (i = 0; input[i] != '\0'; i++)
if (isalpha(input[i]))
return false;
return true;
}
// accept and check
scanf("%s", input); // where input is a pointer to a char with memory allocated
if (isNumber(input)) {
number = atoi(input);
// rest of the code
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE ...
int main(void)
{
char buffer[SIZE];
printf("Gimme an integer value: ");
fflush(stdout);
if (fgets(buffer, sizeof buffer, stdin))
{
long value;
char *check;
/**
* strtol() scans the string and converts it to the equivalent
* integer value. check will point to the first character
* in the buffer that isn't part of a valid integer constant;
* e.g., if you type in "12W", check will point to 'W'.
*
* If check points to something other than whitespace or a 0
* terminator, then the input string is not a valid integer.
*/
value = strtol(buffer, &check, 0);
if (!isspace(*check) && *check != 0)
{
printf("%s is not a valid integer\n", buffer);
}
}
return 0;
}
8条答案
按热度按时间chy5wohz1#
最好测试十进制数字本身,而不是字母。isdigit。
afdcj2ne2#
8wtpewkr3#
isalpha()将一次测试一个字符。如果用户输入了一个数字,如23A4,那么您需要测试每个字母。您可以使用以下代码:
我同意atoi()不是线程安全的,是一个过时的函数。你可以写另一个简单的函数来代替它。
mdfafbf14#
除了isalpha函数之外,您还可以这样做:
ef1yzkbh5#
strto*()
库函数在以下情况下非常有用:nue99wik6#
你也可以用几个简单的条件来实现check whether a character is alphabet or not
也可以使用ASCII值
zqry0prt7#
ifsvaxew8#
你可以实现下面的函数,返回一个布尔值,它检查输入是否只由字符组成,而不是数字,它也忽略空格。注意,它假设输入是由fgets而不是scanf收集的。如果你想使用另一种输入法,你应该只修改while条件。