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

时间:2012-02-16 06:00:53

标签: c string 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$

2 个答案:

答案 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);    
}