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

Pol*_*olb 3 c string

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

#include <stdio.h>

#include <string.h>

int main()
{

    int n;
    char command[255];

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

gsa*_*ras 7

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

scanf("%d", &n);
Run Code Online (Sandbox Code Playgroud)

对此:

scanf("%d ", &n); // this will eat trailing newline
Run Code Online (Sandbox Code Playgroud)

正如chux所说,scanf("%d ", &n)直到用户输入数字并且一些跟随非白空间才会返回.


相关问题:C:多个scanf,当我输入一个scanf的值时,它会跳过第二个scanf

另外我还记得我的例子:用scanf读取char时的注意事项.

另外,正如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;
}
Run Code Online (Sandbox Code Playgroud)

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