我写了一个小C程序,它将从用户那里获得输入并检查输入是偶数还是奇数。
#include<stdio.h>
int main()
{
int n;
printf("Enter an integer number: ");
scanf("%d",&n);
if(n%2 == 0)
{
printf("\n%d is an EVEN number.\n",n);
}
else
printf("\n%d is an ODD number.\n",n);
return 0;
}
但是当我输入字母或符号时,它会将输出显示为0,并表示输入为偶数。如何阻止用户输入字母和符号?最简单的方法是什么?
答案 0 :(得分:3)
只需检查scanf
的返回值 - 它会告诉您成功解析了多少格式对象。在这种情况下,如果它可以解析int,它将返回1,如果它不能解析则返回0。
答案 1 :(得分:3)
您必须检查scanf
的返回值。来自the documentation:
返回值
成功分配的接收参数数,如果在分配第一个接收参数之前发生读取失败,则为
EOF
。
应用于您的代码:
#include <stdio.h>
#include <stdlib.h>
int
main()
{
int n;
printf("Enter an integer number: ");
if (scanf("%d", &n) != 1)
{
printf("This is not a number.\n");
return EXIT_FAILURE;
}
else if (n % 2 == 0)
{
printf("\n%d is an EVEN number.\n", n);
return EXIT_SUCCESS;
}
else
{
printf("\n%d is an ODD number.\n", n);
return EXIT_SUCCESS;
}
}
答案 2 :(得分:3)
如果输入 是整数,那么scanf()
将返回1
,因此您可以检查
if (scanf("%d", &integer) != 1)
invalidInput();
要再次询问用户,您应该知道stdin
中可能还有需要阅读的字符,因此您可以使用getchar()
将其清除,以便完整的功能
int scanint(const char *const message)
{
int value;
printf("%s > ", message);
while (scanf("%d", &value) != 1)
{
int chr;
printf("\tinvalid input...\n");
do {
chr = getchar();
} while ((chr != EOF) && (chr != '\n'));
printf("%s > ", message);
}
return value;
}
你可以像这样使用它
int main()
{
int value = scanint("please input an integer");
printf("your input was: %d\n", value);
return 0;
}
答案 3 :(得分:1)
我可以给你两种方法:
非常简单 - 检查scanf()
的返回值。 1表示成功(整数读取),如果有任何非整数(或EOF上的EOF),则表示0。
为其编写代码:
#include <ctype.h>
#include <stdlib.h>
int isNumeric (const char * s)
{
if (s == NULL || *s == '\0' || isspace(*s))
return 0;
char * p;
strtod (s, &p);
return *p == '\0';
}
现在,在这种情况下,您的scanf
必须从用户处获取字符串,然后将该字符串传递给函数isNumeric()
。