程序跳过部分代码



我在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);  

相关内容

  • 没有找到相关文章

最新更新