C程序不';不要等待用户输入值

C程序不';不要等待用户输入值,c,struct,fgets,C,Struct,Fgets,我是C语言的新手,到目前为止我很喜欢学习它,但是我的程序遇到了一个问题,我很难弄清楚。在下面的程序中,如果用户输入“1”,则会提示他们输入“钥匙”、“年龄”、“名字”和“姓氏”。但是,当用户输入“1”时,程序不会等待用户输入“Key”值,而是直接打印到“Age” 输入“1”后的输出: 输入以下信息: 关键词:年龄: 在要求用户输入年龄值之前,程序不会等待用户输入键值。生成程序时不会出现错误或警告 非常感谢您的任何帮助 typedef struct userInputsContainer {

我是C语言的新手,到目前为止我很喜欢学习它,但是我的程序遇到了一个问题,我很难弄清楚。在下面的程序中,如果用户输入“1”,则会提示他们输入“钥匙”、“年龄”、“名字”和“姓氏”。但是,当用户输入“1”时,程序不会等待用户输入“Key”值,而是直接打印到“Age”

输入“1”后的输出:

输入以下信息: 关键词:年龄:

在要求用户输入年龄值之前,程序不会等待用户输入键值。生成程序时不会出现错误或警告

非常感谢您的任何帮助

typedef struct userInputsContainer {
    char inputOption[2];
    char inputKey[2];
    char inputAge[3];
    char inputFName[10];
    char inputLName[10];
}userInputsContainer;

int main()
{
    struct userInputsContainer* container = (struct     userInputsContainer*)malloc(sizeof(userInputsContainer));

    printf("List of options..\n");
    printf("1.Create Entry\n2.Search Entries\n");
    fgets(container->inputOption, sizeof(container->inputOption), stdin);

    if(container->inputOption[0] == '1')
    {
        printf("\nEnter the following information.. \n");

        printf("Key: ");
        fgets(container->inputKey, sizeof(container->inputKey), stdin);
        printf("Age: ");
        fgets(container->inputAge, sizeof(container->inputAge), stdin);
        printf("First Name: ");
        fgets(container->inputFName, sizeof(container->inputFName), stdin);
        printf("Last Name: ");
        fgets(container->inputLName, sizeof(container->inputLName), stdin);
    }
}

对于第一次输入,当您读入
container->inputOption
时,数组
inputOption
有足够的空间容纳一个字符和字符串终止符。问题是,通常需要在输入之后读取换行符,并将其添加到缓冲区。如果缓冲区中没有空间(这里就是这种情况),那么将不读取换行符并将其留在输入缓冲区中。因此,下一个调用将把这一新行作为第一个字符来读,并认为它已经读了整行,然后返回,不再阅读任何内容

对于这个问题,基本上有两种解决方案:第一种是将
容器->inputOption
数组的大小从两个字符增加到三个字符,以便适合换行符


第二种解决方案是在第一次调用后有一个循环,该循环读取并丢弃字符,直到它读取换行符。

对于第一次输入,当您读入
容器->输入选项时,数组
输入选项
有足够的空间容纳一个字符和字符串终止符。问题是,通常需要在输入之后读取换行符,并将其添加到缓冲区。如果缓冲区中没有空间(这里就是这种情况),那么将不读取换行符并将其留在输入缓冲区中。因此,下一个调用将把这一新行作为第一个字符来读,并认为它已经读了整行,然后返回,不再阅读任何内容

对于这个问题,基本上有两种解决方案:第一种是将
容器->inputOption
数组的大小从两个字符增加到三个字符,以便适合换行符


第二种解决方案是在第一次调用后有一个循环,该循环读取并丢弃字符,直到读取换行符。

@user3121023不需要存储字符。空行呢?@user3121023不需要存储字符。那么空行呢?非常感谢你的解释,我确实学到了一些新的东西!这解决了我的问题!非常感谢你的解释,我确实学到了一些新东西!这解决了我的问题!