这是我的第一个问题,抱歉,如果我做错了。 我必须制作一个识别游泳运动员分类的程序。程序执行此操作,但是当我写一个字符串时,它接受像int变量。 为什么会这样,以及我如何解决这个问题 谢谢
printf("Write the age of the swimmer\n");
scanf("%d", &age);
if(age < 5)
printf("minimum age is five years old\n");
else if(age >= 5 && age <= 7)
printf("Category: child A\n");
else if(age >= 8 && age <= 11)
printf("Category: child B\n");
else if(age >= 12 && age <= 13)
printf("Category: Juvenile A\n");
else if(age >= 14 && age <= 17)
printf("Category: Juvenile A\n");
else if(age >= 18)
printf("Category: Adult\n");
else
printf("Write only numbers\n");
system("PAUSE");
return 0;
答案 0 :(得分:4)
您需要检查scanf()
if (scanf("%d", &age) != 1) {
/* error, age is in an unusable state */
fprintf(stderr, "error reading an integer.\n");
exit(EXIT_FAILURE);
}
答案 1 :(得分:0)
C中int的大小大于字符大小。因此int
可以适应角色。在C中我们必须从记忆的角度思考。所以变量是一个内存位置。当我们定义int a
;如果你机器中int的大小是4个字节,则保留4个字节的内存。您可以将任何内容保存在该内存中。 int
表示4个字节。如果你存储大于4个字节的东西,那么这个数据也可能存储起来,这取决于连续的位置是否可用(但是你会遇到问题,这在C中是非法的)这是<的答案< strong>为什么C接受int变量中的字符串?。
现在你可以施加限制,不允许任何不可接受的值,例如检查scanf的返回值,正如在另一个答案中指出的那样。
结束int
或char
或该事项的任何数据类型都是内存位置,其类型仅用于保留适当大小的目的。存储在其中的数据不会被变量本身监视或控制,并且不会出现这种情况
答案 2 :(得分:-1)
C scanf()
不检查输入是否与格式匹配。您可以尝试使用fgets()
读取输入,然后将返回的字符串转换为strtol()
的整数,如下所示:
char line[256];
long value;
while(fgets(line, sizeof line, stdin) != NULL) {
char *err = NULL;
value = strtol(line, &err, 10);
if(err == NULL || !isspace(*err)) {
printf("Not a long: %s", line);
continue;
}
break;
}
printf("%ld", value);