c - gets 函数没有读取我的变量

标签 c gets

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

#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);
}

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

最佳答案

您的 scanf 仅消耗您输入的数字。此后的任何其他内容,包括您输入的回车符/换行符,都将保留在 IO 缓冲区中。

因此 gets 会拾取数字后面剩下的任何内容(可能只是换行符)并立即返回。

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

关于c - gets 函数没有读取我的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20446322/

相关文章:

c - 了解 C 中的取消引用、地址和数组下标运算符

c - 为什么我可以在 gcc -std=c11 中使用 gets()?

c - 用 C 实现类

c - gets() 和 puts() 显示我没有输入的字符

c - gets 和 put 获取并打印字符串

c - 如何在给定代码中接受 C 中字符串中的空格

c - 带重定向的fgets()调用获取异常数据流

c - 从 Motif 中的 BulletinBoard 小部件中删除关闭按钮

c - C 和 SICP 中的尾递归

C++ qsort中的size参数有什么作用