无法中断“while”循环-C

无法中断“while”循环-C,c,while-loop,C,While Loop,我试图实现一个简单的while循环,让用户输入多个标记,而不必重新加载应用程序,因为某种原因,无论我输入什么,它总是循环 我已经看过使用调试器的情况,但它似乎不接受最后的scanf询问是否重复它自己 int mark = 0; char grade; char choice = 'y'; while(choice == 'y') { //Request input printf("enter a mark: ");

我试图实现一个简单的while循环,让用户输入多个标记,而不必重新加载应用程序,因为某种原因,无论我输入什么,它总是循环

我已经看过使用调试器的情况,但它似乎不接受最后的scanf询问是否重复它自己

int mark = 0;
    char grade;
    char choice = 'y';

    while(choice == 'y')
    {
        //Request input
        printf("enter a mark: ");
        scanf("%d", &mark);

        //Assess mark
        grade = assess(mark);

        //Output result
        printf("That equals ");
        printf("%c", grade);
        printf(" when graded\n");

        //Repeat?
        printf("Again?...\n");
        fflush(stdin);
        scanf("&c", &choice);
    }

我还尝试了一个do-while循环,但仍然没有乐趣,你知道问题出在哪里吗?

我认为最后一行应该是

scanf("%c", &choice);
而不是

scanf("&c", &choice);

我想最后一行应该是

scanf("%c", &choice);
而不是

scanf("&c", &choice);
至少有两个问题:

  fflush(stdin);
未定义-只能刷新输出流。以及:

    scanf("&c", &choice);
应该是:

    scanf("%c", &choice);
至少有两个问题:

  fflush(stdin);
未定义-只能刷新输出流。以及:

    scanf("&c", &choice);
应该是:

    scanf("%c", &choice);
fflush仅为输出流定义。不建议将其用于标准DIN

另外,正如其他人所指出的,使用scanf%c,&choice;阅读选项。

fflush仅为输出流定义。不建议将其用于标准DIN

另外,正如其他人所指出的,使用scanf%c,&choice;阅读选项。

请尝试扫描%c,&choice

请注意,scanf返回匹配的输入数,因此您应该真正检查返回值。如果由于som原因,输入未映射到字符,则变量可能会保持不变。在调用scanf之前,将choice设置为something!='y',因此只有在输入y时才能继续。

请尝试扫描%c,&choice


请注意,scanf返回匹配的输入数,因此您应该真正检查返回值。如果由于som原因,输入未映射到字符,则变量可能会保持不变。在调用scanf之前,将choice设置为something!='y',因此只有在输入y时才继续。

扫描函数没有执行您认为应该执行的操作。最后一个扫描函数应该是扫描函数%c,&choice?扫描函数没有执行您认为应该执行的操作。最后一个扫描函数应该是扫描函数%c,&choice?在定义操作的情况下,fflushstdin也不好,由于它将中断批处理,例如,graderresults.txt。非常好,谢谢您的回答。由于某种原因,我一直被搞混了。我通常从不使用fflush,但在搜索互联网时发现在一些论坛帖子中提到了它。fflushstdout,是的,它非常常用。如果您想打印出任何内容而不在末尾添加换行符,比如更新进度表,则需要使用fflushstdout来显示新数据。fflushstdin-不,没有真正意义。在定义操作的情况下,fflushstdin也不好,因为它会中断批处理,例如graderresults.txt。非常好,感谢您的回答。由于某种原因,我一直被搞混了。我通常从不使用fflush,但在搜索互联网时发现在一些论坛帖子中提到了它。fflushstdout,是的,它非常常用。如果您想打印出任何内容而不在末尾添加换行符,比如更新进度表,则需要使用fflushstdout来显示新数据。不,没有真正的意义。