读完整数后,C无法读取字符串

时间:2015-12-01 15:14:56

标签: c string

以下是我的源代码。读完整数后,程序应该等到我键入一个字符串然后按回车键。但是,只要我输入整数,程序就会退出。你能告诉我我的错吗?

#include <stdio.h>

#include <string.h>

int main()
{

    int n;
    char command[255];

    scanf("%d", &n);
    fgets(command, 255, stdin);

    return 0;
}

我提到我也尝试使用gets(command),但我得到的结果相同。

3 个答案:

答案 0 :(得分:7)

有一个尾随换行符,因为你在整数后按 ENTER 。通过改变它来吃它:

scanf("%d", &n);

到此:

scanf("%d ", &n); // this will eat trailing newline

正如chux所说,scanf("%d ", &n)将不会返回,直到用户输入数字和一些非白色空格。

相关问题:C: Multiple scanf's, when I enter in a value for one scanf it skips the second scanf

另外,我想到了我的例子:Caution when reading char with scanf

另外,正如Marco所说,您可以使用:scanf("%d\n", &n);,专门针对换行符。

还有这种可能性:

#include <stdio.h>
#include <string.h>

int main()
{

    int n;
    char command[255], newline;

    scanf("%d", &n);
    scanf("%c", &newline); // eat trailing newline
    fgets(command, 255, stdin);

    return 0;
}

但是,我个人会使用两个fgets()而不是scanf()。 :)

答案 1 :(得分:2)

scanf()在整数后留下换行符,fgets()将读取并退出。

尝试使用fgets()阅读所有输入。

#include <stdio.h>
#include <string.h>

int main()
{

    char buffer[255];
    int n;
    char command[255];

    fgets(buffer, sizeof(buffer), stdin);
    sscanf(buffer, "%d", &n);
    fgets(command, sizeof(command), stdin);

    return 0;
}

答案 2 :(得分:1)

键入"3c"并在控制台中按Enter将使输入缓冲区stdin看起来像这样:{'3','c','\n'}并且可以正常工作,因为scanf消耗3,fgets消耗{{1} } {} c将在\n停止的位置。

但是如果你输入“3”然后按回车键,scanf将消耗3,并且换行字符将被保留,导致fgets不消耗任何字符。