我需要帮助我的程序获得一个有效的整数。我写了一个工作正常的代码,但如果我输入例如453F,它应该显示“Invalid int”,但我的输出是453.似乎它不检查最后一个int,但我不知道如何制作它检查并显示为无效输入。这是我的代码:
int main ()
{
int x;
getInteger(x);
return 0;
}
int getInteger (int x)
{
float check;
printf ("enter a integer number: \n\n");
scanf ("%f", &check);
x = check;
if (x == check)
{
printf("\nYour number is %d", x);
}
else
{
printf("\nThis is not an integer number, please insert an integer!\n\n");
}
getch();
}
答案 0 :(得分:0)
您可能必须将该值读取为字符串,然后使用例如strtol
将其转换为带错误检查的整数。
可以这样做:
char str[64];
scanf("%63s", str);
char *endptr;
int value = (int) strtol(str, &endptr, 10);
if (endptr == str)
printf("Not a valid integer\n");
else if (*endptr != '\0')
printf("Valid number, but followed by non-numeric data\n");
else
printf("A valid number: %d\n", value);
您输入453F
的情况会导致第二个字符串在上面的代码中打印出来。
答案 1 :(得分:0)
嗯,这就是scanf
的工作方式 - 它会匹配它的内容,它会将F
留在输入缓冲区中。
其他方法是读取字符串值(使用%s
格式说明符),它将接受所有字符,然后你可以使用strtof
(你可以找到很多如何使用它的例子)来转换它通过错误检查浮动到浮点数。
答案 2 :(得分:0)
你可以读作一个字符串并检查(char by char)ascii值在正确的范围内(48-57)。