今天我注意到,有时当我使用 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/