C程序不';不要等待用户输入值
我是C语言的新手,到目前为止我很喜欢学习它,但是我的程序遇到了一个问题,我很难弄清楚。在下面的程序中,如果用户输入“1”,则会提示他们输入“钥匙”、“年龄”、“名字”和“姓氏”。但是,当用户输入“1”时,程序不会等待用户输入“Key”值,而是直接打印到“Age” 输入“1”后的输出: 输入以下信息: 关键词:年龄: 在要求用户输入年龄值之前,程序不会等待用户输入键值。生成程序时不会出现错误或警告 非常感谢您的任何帮助C程序不';不要等待用户输入值,c,struct,fgets,C,Struct,Fgets,我是C语言的新手,到目前为止我很喜欢学习它,但是我的程序遇到了一个问题,我很难弄清楚。在下面的程序中,如果用户输入“1”,则会提示他们输入“钥匙”、“年龄”、“名字”和“姓氏”。但是,当用户输入“1”时,程序不会等待用户输入“Key”值,而是直接打印到“Age” 输入“1”后的输出: 输入以下信息: 关键词:年龄: 在要求用户输入年龄值之前,程序不会等待用户输入键值。生成程序时不会出现错误或警告 非常感谢您的任何帮助 typedef struct userInputsContainer {
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不需要存储字符。那么空行呢?非常感谢你的解释,我确实学到了一些新的东西!这解决了我的问题!非常感谢你的解释,我确实学到了一些新东西!这解决了我的问题!