这个问题已经有了答案:
Reading string from input with space character? [duplicate]
14个答案
我希望下面的命令请求输入,然后输入一个字符串(带空格),然后再次执行。但它在输入第一个字符串后重复输出“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$

最佳答案

你通常希望使用如下内容:

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

07-24 09:37
查看更多