输入后,C while循环不会停止运行

时间:2020-09-29 23:14:13

标签: c

我正在尝试创建一个程序,反复要求用户输入。但是,在这种情况下,该程序只会继续打印"Enter your input",直到我第一次输入内容后崩溃为止。

#include <stdio.h>

int main() {

    while (1) {
        char input[100];

        printf("Enter a input: ");
        scanf("%[^\n]s", input);
    }
}

2 个答案:

答案 0 :(得分:1)

您要让scanf()读取直到但不包括(该行结束了用户输入)的所有内容。

因此,换行符保留在输入缓冲区中。然后,在随后调用scanf()时,仍然不会从输入缓冲区读取换行符,从而阻止scanf()读取任何新输入。

您需要从输入缓冲区读取该换行符,以便对scanf()的后续调用可以读取用户的下一个输入。

答案 1 :(得分:1)

在:

scanf("%[^\n]s", input);

有两个问题:

  1. s不是该特定说明符的一部分,它应该仅为%[^\n]

  2. 该说明符将\n换行符留在输入缓冲区中。

    您的循环将进入一个无限循环,因为那里总是有一些要读取的东西,但这是必须不被解析并且应该保留在缓冲区中的东西。

    摆脱它的一种简单方法是在说明符之前放置一个空格:

    scanf(" %[^\n]", input);
           ^
           |