我想知道是否有人输入了一个号码,如果他们这样做,程序会继续,但如果他们没有,程序就会终止。
int main(void) {
int i;
printf("Enter a number: ");
scanf("%d",&i);
/*If input is not a number than terminate*/
/*Otherwise continue*/
else {
if (test_prime(i))
printf("Prime.\n");
else
printf("Not prime.\n");
}
return 0;
}
如果用户输入"你好"比我希望程序终止。
答案 0 :(得分:5)
正确的方法就是这样
int main(void) {
int i;
printf("Enter a number: ");
if( scanf("%d",&i) != 1){
fprintf(stderr,"%s\n","Error in input, input is not number");
exit(1);
}
/*input is a number */
if (test_prime(i))
printf("%s\n","Prime.");
else
printf("%s\n","Not prime.");
return 0;
}
检查scanf
的返回值有助于我们了解scanf
来电是否成功。
或者,您可以使用fgets()
获取行输入,然后解析它并检查strtol
等函数。
检查输入是否正确,仅应用isdigit()
不是解决方案。(如其他答案中所述)。您可以通过提供输入1234
进行检查,但您会看到isdigit()
解决方案在此处失败,但它不应该。
为了让您了解isdigit
解决方案为什么不起作用,从7.4.1.5标准我们可以看到报价
isdigit
函数测试任何十进制数字。
十进制数字符为0
,1
... 9
。
如果你看一下它所说的函数的返回值
该函数返回分配的输入项数,即可 在早期的情况下,提供的数量少于或甚至为零 匹配失败。
这是正在检查的内容。这也适用于多位数。
答案 1 :(得分:3)
要扩展yano描述的内容,您需要将scanf函数设置为整数变量,该变量将计算成功扫描的数量。在这里,您正在寻找一个成功的扫描:如果整数c不是1,则返回一条消息“无效数字”等。
int main(void) {
int i;
int c;
printf("Enter a number: ");
c = scanf("%d",&i);
if(c != 1) {
printf("Invalid number");
}
else {
printf("%d",i);
return 0;
}
}
答案 2 :(得分:2)
我们有一个函数isdigit()来识别变量,代码如下:
int main(void) {
int i;
printf("Enter a number: ");
scanf("%d",&i);
if( isdigit(i) ) {
printf("It is a digit.");
}
else {
if (test_prime(i))
printf("Prime.\n");
else
printf("Not prime.\n");
}
return 0;
}
答案 3 :(得分:1)
使用 ctype 头文件
中的isdigit()如果输入的值是非数字字符,则此函数将返回0.
在你的情况下,
#include<ctype.h>
if(isdigit(i)==0)
{ // Terminate
}
else
{ if (test_prime(i))
printf("Prime.\n");
else
printf("Not prime.\n");
}
更多参考访问 https://www.programiz.com/c-programming/library-function/ctype.h/isdigit