我是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);
}
}
答案 0 :(得分:0)
对于第一个输入,当您读入module.exports = function(app){
//I got access to app.locals
}
时,数组container->inputOption
有足够的空间来容纳一个字符和字符串终止符。问题是fgets
通常也想在输入后读取换行符,并将其添加到缓冲区。如果缓冲区中没有空格(这里是这种情况),则fgets
将不会读取换行符并将其保留在输入缓冲区中。因此,对fgets
的下一次调用会将此换行符读作第一个字符,并认为它读取整行并返回而不再读取任何内容。
这个问题基本上有两个解决方案:第一个是将inputOption
数组的大小从两个字符增加到三个字符,因此它适合换行符。
第二个解决方案是在第一个fgets
调用之后有一个循环,它会读取并丢弃字符,直到它读取换行符为止。