我希望以下内容要求输入,然后接受一个字符串(带空格),然后重新执行。但是在输入第一个字符串后,它会重复输出“input $”。
char command[80];
while(1)
{
printf("input$ ");
scanf("%[^\n]", command);
}
我的输出:nput$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$^C
我想要的是什么:
input$ hi
input$ this can take spaces
input$
答案 0 :(得分:5)
您通常希望使用以下内容:
char command[80];
while(1)
{
printf("input$ ");
scanf("%79[^\n]%*c", command);
}
'79'防止缓冲区溢出,%*c
消耗输入缓冲区中的换行符。它有一个小缺点:即使输入缓冲区中的下一个字符不换行,它仍将消耗(并丢弃)一个字符。如果你必须处理这种可能性,你可以阅读它并忽略它,除非你的command
缓冲区已满:
char ignore;
scanf("%79[^\n]%c", command, &ignore);
if (strlen(command) == 79)
// `ignore` probably shouldn't be ignored after all
答案 1 :(得分:2)
试试这个:
char command[80];
while(1)
{
printf("input$ ");
fgets(command, 80, stdin);
}