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

时间:2013-12-07 20:36:20

标签: c gets

我今天注意到,有时当我使用gets函数时,我的编译器会忽略它。 好。这是一个有效的例子:

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

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

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

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

1 个答案:

答案 0 :(得分:5)

您的scanf仅使用您输入的号码。在包括您输入的回车/换行符之后的任何其他内容都留在IO缓冲区中。

所以gets选择号码后面留下的内容(可能只是换行符)并立即返回。

评论者注意到:不要使用gets。它实际上已从C标准中删除(不再在C11中),因为它基本上是不安全的。请改用fgets