使用scanf读取带空格的字符串?

我希望以下内容要求输入,然后接受一个字符串(带空格),然后再做一次。 但在输入第一个字符串后,它会重复输出“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 

试试这个:

 char command[80]; while(1) { printf("input$ "); fgets(command, 80, stdin); }