scanf在C语言中不是很宽容

scanf在C语言中不是很宽容,c,scanf,C,Scanf,在下面的代码中,我希望给用户一个选项,键入“e”退出代码并查看结果,而不是代码中目前使用的100。但是,由于scanf需要一个与声明的类型匹配的整数,因此无法从终端使用“e”正确运行代码。如果我键入任何字符而不是整数,scanf将以某种方式将其存储在变量中。这种方式是固定的吗?如果它是固定的,我可以使用存储的值来检查是否退出程序 #include<stdio.h> int main(void) { int rating[11], x; for (int a = 0;

在下面的代码中,我希望给用户一个选项,键入“e”退出代码并查看结果,而不是代码中目前使用的100。但是,由于scanf需要一个与声明的类型匹配的整数,因此无法从终端使用“e”正确运行代码。如果我键入任何字符而不是整数,scanf将以某种方式将其存储在变量中。这种方式是固定的吗?如果它是固定的,我可以使用存储的值来检查是否退出程序

#include<stdio.h>
int main(void)
{
    int rating[11], x;

    for (int a = 0; a <= 11; a++)
        rating[a] = 0;

    while (1){
        printf("key in 100 to see the results\n");
        printf("Enter the rating on a scale from 1 to 10 ?");
        scanf("%i", &x);

        if ((x < 1 || x > 10) && x != 100)
            printf("bad entry ! \n");

        if (x == 100){
            printf("\nRatings..............No of responses\n");
            for (int y = 1; y <= 10; y++)
                printf("%2i.......................%2i\n", y, rating[y]);
            return 0;
        }

        rating[x]++;
    }
}
#包括
内部主(空)
{
整数评级[11],x;
对于(int a=0;a 10)和&x!=100)
printf(“错误输入!\n”);
如果(x==100){
printf(“\nRatings………..无响应\n”);

for(int y=1;y
scanf
返回成功读取的项目数(或错误时返回-1)。因此,您可以检查
scanf
是否返回0,在这种情况下,它将退出程序,如果输入任何非数字的内容


如果您特别想检查
'e'
,最好的办法是
fgets
整行输入,使用
strcmp
检查您的特殊情况,然后使用
atoi
获得整数。

如果您键入
'e'
scanf(“%i”,&var);
将失败,并且不会在
var
中存储任何内容。如果您想要为不同类型的输入设置选项,
fgets
一行并
sscanf
它。您不能将“x”改为字符而不是整数吗?或者,如果x用于其他值,则初始化另一个变量,然后类似于..If(x='e')){//显示结果}尝试将scanf放入if语句中。如果它接收到的内容不是它应该接收的内容,它将返回一个错误代码“scanf在C中不是很宽容”::忍住笑声::是的。一点也不宽容。我的看法正好相反。
scanf
不会判断。最好使用
strtol
而不是
atoi
来获取整数(因为它有错误处理)。