为什么c接受int变量中的字符串

时间:2016-03-13 09:47:08

标签: c

这是我的第一个问题,抱歉,如果我做错了。 我必须制作一个识别游泳运动员分类的程序。程序执行此操作,但是当我写一个字符串时,它接受像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;

3 个答案:

答案 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的返回值,正如在另一个答案中指出的那样。

结束intchar或该事项的任何数据类型都是内存位置,其类型仅用于保留适当大小的目的。存储在其中的数据不会被变量本身监视或控制,并且不会出现这种情况

答案 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);