这个问题已经在这里有一个答案:
- 判断一个C字符串在C有效的int 5个回答
我具有从用户接受的整数,并且在加法运算使用该号码的程序。
我现在用接受数字的代码是这样的:
scanf("%d", &num);
如何可以验证输入,使得如果用户输入字母或数字值的小数点,被显示在屏幕上显示错误消息?
这个问题已经在这里有一个答案:
我具有从用户接受的整数,并且在加法运算使用该号码的程序。
我现在用接受数字的代码是这样的:
scanf("%d", &num);
如何可以验证输入,使得如果用户输入字母或数字值的小数点,被显示在屏幕上显示错误消息?
你应该用scanf
的返回值。 从man scanf
:
返回值
这些函数返回成功匹配,并分配输入项目,其可为少于规定的,或甚至零在早期匹配失败的情况下的数量。
因此,它可能是这样的:
if (scanf("%d", &num) != 1)
{
/* Display error message. */
}
请注意,它不为“数字小数点”工作。 为此,您应该宁愿使用分析和strtol
的实例。 这可能是更复杂一点。
读你输入的使用是文本scanf
用%s
转换符,或者使用fgets
,然后使用strtol
库函数来执行转换:
#define MAX_DIGITS 20 // maximum number of decimal digits in a 64-bit integer
int val;
int okay = 0;
do
{
char input[MAX_DIGITS+2]; // +1 for sign, +1 for 0 terminator
printf("Gimme a number: ");
fflush(stdout);
if (fgets(input, sizeof input, stdin))
{
char *chk = NULL; // points to the first character *not* converted by strtol
val = (int) strtol(input, &chk, 10);
if (isspace(*chk) || *chk == 0)
{
// input was a valid integer string, we're done
okay = 1;
}
else
{
printf("\"%s\" is not a valid integer string, try again.\n", input);
}
}
} while (!okay);