我无法正确接受用户的输入

时间:2019-05-20 02:14:44

标签: c visual-studio

我曾经使用过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中从用户那里获取输入的良好做法是什么?

1 个答案:

答案 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;
}