程序会跳过部分代码

时间:2014-03-22 10:51:26

标签: c string file function

我的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();   
}

2 个答案:

答案 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);