我正在尝试创建一个程序,反复要求用户输入。但是,在这种情况下,该程序只会继续打印"Enter your input"
,直到我第一次输入内容后崩溃为止。
#include <stdio.h>
int main() {
while (1) {
char input[100];
printf("Enter a input: ");
scanf("%[^\n]s", input);
}
}
答案 0 :(得分:1)
您要让scanf()
读取直到但不包括(该行结束了用户输入)的所有内容。
因此,换行符保留在输入缓冲区中。然后,在随后调用scanf()
时,仍然不会从输入缓冲区读取换行符,从而阻止scanf()
读取任何新输入。
您需要从输入缓冲区读取该换行符,以便对scanf()
的后续调用可以读取用户的下一个输入。
答案 1 :(得分:1)
在:
scanf("%[^\n]s", input);
有两个问题:
s
不是该特定说明符的一部分,它应该仅为%[^\n]
。
该说明符将\n
换行符留在输入缓冲区中。
您的循环将进入一个无限循环,因为那里总是有一些要读取的东西,但这是必须不被解析并且应该保留在缓冲区中的东西。
摆脱它的一种简单方法是在说明符之前放置一个空格:
scanf(" %[^\n]", input);
^
|