我的c代码一直存在问题,每当我得到一个输入并调用一个函数时,它将跳过函数的第一部分并执行下一部分。
编辑:问题已经解决,此代码完全正常。
使用while((c = getchar())!=' \ n'&& c!= EOF);毕竟输入
void Fruit(void);
void Fruit2(void);
void Chocolate(void);
int choice=0;
char fruit[32];
char fruit2[32];
char Choco[32];
int c;
int main()
{
printf("Which food do you prefer, 1=Fruit?, 2=Chocolate?");
scanf("%d",&choice);
while((c = getchar()) != '\n' && c != EOF);
if(choice==1)
{
Fruit();
}
else if(choice==2)
{
Chocolate();
}
else
{
printf("Pick one");
}
}
void Fruit(void)
{
printf("Enter your favourite fruit?\n");
gets(fruit);
while((c= getchar()) != '\n' && c != EOF);
printf("What is your second most favourite fruit?\n\n");
gets(fruit2);
while((c = getchar()) != '\n' && c != EOF);
system("cls");
printf("You like %s's and %s's ",fruit,fruit2);
getch();
}
void Chocolate(void)
{
printf("Enter your favourite chocolate bar\n\n");
gets(Choco);
while((c = getchar()) != '\n' && c != EOF);
system("cls");
printf("You like %s",Choco);
getch();
}
答案 0 :(得分:3)
而不是
printf("You like %s's and %s's ");
你应该
printf("You like %s's and %s's ", fruit, fruit2);
类似于第二份印刷声明。
答案 1 :(得分:2)
您的函数gets
中的函数Chocolate()
会读取\n
留下的scanf
字符。在按 Enter 键时,带有输入的额外字符\n
将传递给缓冲区。 scanf
没有读过这个角色。您需要在调用gets
之前使用它。
可能的解决方案: What can I use to flush input?
我建议你不要使用gets
。它现在已从C标准中删除。相反,您可以使用fgets
。
fgets(fruit, sizeof(fruit), stdin);