获取函数不是读取我的变量

use*_*259 2 c gets

我今天注意到有时当我使用gets函数时,我的编译器只是忽略它.好.这是获取有效的示例:

#include <stdio.h>
void main()
{
    char s[50];
    gets(s);
    puts(s);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我对程序进行这个简单的更改,则会忽略函数gets:

#include <stdio.h>
void main()
{
    int n;    
    printf("dati n:\n");    
    scanf("%d",&n);    
    char s[50];
    gets(s);
    puts(s);
}
Run Code Online (Sandbox Code Playgroud)

"忽略"意味着当我运行程序时,编译器会读取变量,然后退出而不读取我的字符串.为什么会这样?谢谢.

Mat*_*Mat 5

scanf只会消耗您输入的号码.之后的任何其他内容(包括您键入的回车符/换行符)都会留在IO缓冲区中.

所以gets拿起号码后面留下的东西(可能只是换行符)并立即返回.

评论者指出:不要使用gets.它实际上已从C标准中删除(不再在C11中),因为它从根本上说是不安全的.请fgets改用.