我在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?nn");
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 barnn");
gets(Choco);
while((c = getchar()) != 'n' && c != EOF);
system("cls");
printf("You like %s",Choco);
getch();
}
代替
printf("You like %s's and %s's ");
你应该有
printf("You like %s's and %s's ", fruit, fruit2);
第二个print语句也是如此。
函数Chocolate()
中的函数gets
读取scanf
留下的n
字符。在按时,输入键,一个额外的字符n
与输入传递到缓冲区。scanf
不读取这个字符。您需要在调用gets
之前使用它。
可能的解决方案:我可以使用什么来刷新输入?
我建议你不要使用gets
。它现在已从C标准中删除。相反,您可以使用fgets
。
fgets(fruit, sizeof(fruit), stdin);