我曾经使用过scanf();但是Visual Studio告诉我这并不安全, 当我使用fgets();它只输入前两个输入,而第三个则被忽略
void main() {
char c=' ';
char s[20];
char sen[40];
fgets(&c, sizeof(c), stdin);
fgets(s, sizeof(s), stdin);
fgets(sen, sizeof(sen), stdin);
system("pause");
}
在这里它实现了前两个和第三个fget被完全忽略 为什么?? 以及在c中从用户那里获取输入的良好做法是什么?
答案 0 :(得分:2)
fgets将空终止符与回车符一起存储在缓冲区中。因此,您应确保缓冲区足够大以存储数据+空终止符+回车符。如果要使用像c这样的单个字符,则它应该是大小为3的数组。Character + 0 + \ n 将数组初始化为零也是一种好习惯。
web.config
并使用int main代替void main。
如果确实要在fgets中使用单个字符输入,则可以通过读取直到从流中拉回车符来自己清除输入流。
#include <stdio.h>
int main() {
char c[3] = {0};
char s[20] = {0};
char sen[40] = {0};
fgets(c, sizeof(c), stdin);
fgets(s, sizeof(s), stdin);
fgets(sen, sizeof(sen), stdin);
return 0;
}