C程序不会等待用户输入值

时间:2016-09-17 23:22:36

标签: c struct fgets

我是C的新手,并且喜欢到目前为止学习它,但是我遇到了我的程序问题,我很难弄清楚。在下面的程序中,如果用户输入" 1",则会提示他们输入" Key"," Age"," First Name& #34;和"姓氏"。但是,当用户输入" 1"时,程序不会等待用户输入"键"价值,而是直接打印到"年龄"。

输入" 1":

后的输出

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

在要求用户输入Age值之前,程序不会等待用户输入Key值。在构建程序时没有发生错误或警告。

非常感谢任何和所有帮助。

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);
    }
}

1 个答案:

答案 0 :(得分:0)

对于第一个输入,当您读入module.exports = function(app){ //I got access to app.locals } 时,数组container->inputOption有足够的空间来容纳一个字符和字符串终止符。问题是fgets通常也想在输入后读取换行符,并将其添加到缓冲区。如果缓冲区中没有空格(这里是这种情况),则fgets将不会读取换行符并将其保留在输入缓冲区中。因此,对fgets的下一次调用会将此换行符读作第一个字符,并认为它读取整行并返回而不再读取任何内容。

这个问题基本上有两个解决方案:第一个是将inputOption数组的大小从两个字符增加到三个字符,因此它适合换行符。

第二个解决方案是在第一个fgets调用之后有一个循环,它会读取并丢弃字符,直到它读取换行符为止。