这个问题已经有了答案:
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