C 我无法正确地从用户处获取输入
我曾经和scanf一起工作;但visual studio告诉我这不安全, 当我使用FGET时;它只输入前两个输入,忽略第三个输入C 我无法正确地从用户处获取输入,c,visual-studio,C,Visual Studio,我曾经和scanf一起工作;但visual studio告诉我这不安全, 当我使用FGET时;它只输入前两个输入,忽略第三个输入 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("pa
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,而第三个FGET完全被忽略
为什么?
在c语言中,从用户处获取输入有哪些好的做法?fgets会将空终止符和回车符存储在缓冲区内。因此,您应该确保缓冲区足够大,可以存储数据+空终止符+回车符。如果使用单个字符(如c),则它应该是大小为3的数组。字符+0+\n 对数组进行零初始化也是一种很好的做法
#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;
}
并使用int main而不是void main
如果确实希望在FGET中使用单个字符输入,则可以通过读取直到从输入流中提取回车符来清除输入流
#include <stdio.h>
int main() {
char c;
char s[20] = {0};
char sen[40] = {0};
fgets(&c, sizeof(c), stdin);
while(getchar() != '\n'); //read until carriage return
fgets(s, sizeof(s), stdin);
fgets(sen, sizeof(sen), stdin);
return 0;
}
您可以使用scanf_而不是scanf,这是微软的建议。它与scanf不同,但也与之类似,因此请仔细阅读手册。现在,您如何知道它只输入前2!?症状是什么?你提供了什么意见?你怎么知道这些变量存储了什么?@AnttiHaapala我声明了一个char变量、char数组和另一个char数组,并让用户使用fgets输入它们,因此程序要求输入前两个变量,甚至停止显示我在第三个fgets之前放置的第三个printf\