获取(string#)函数跳过第一个获取请求

我正在为自己的个人休闲和学习做一个项目。 部分内容如下:

#include #include wgame() { char string3[12], string2[12], string1[12], string4[12], string5[12]; memset (string1, 0, 11); memset (string2, 0, 11); memset (string3, 0, 11); memset (string4, 0, 11); memset (string5, 0, 11); printf("reference C correct\n"); printf("Okay, so you want a game. Here's one for you\n\n\n"); printf("This is a word game.\n\n A noun is a person place or thing.\n A verb is something that you can get up and do.\n A subject is what the conversation is about.\n"); printf("Go ahead, type a subject:\n"); gets(string3); printf("That's a good one. Now, type a verb:\n"); gets(string2); printf("How about another:\n"); gets(string4); printf("Really? Okay. Now, type in a noun:\n"); gets(string1); printf("Cool. How about typing another noun:\n"); gets(string5); printf("Allright, here's how your words fit into this game:\n\n\n\n\n"); printf("When the %s was %s the %s %s all the other %s", string1, string2, string3, string4, string5); return 4; } 

我的问题是输出跳过第一个“gets(string#)”并继续下一个“printf()”。 谁能告诉我为什么会这样?

wgame之前你可能正在做一些在stdio缓冲区中留下\n scanf

以下是您应该做的一些事情:

  • 不要混合scanfgets
  • 不要使用gets 。 使用fgets
  • 不要听人们暗示fflush(stdin) 这是错的

非常谨慎和适度,您可以使用:

 /* Right before `wgame` begins. */ while((c = getchar()) != '\n' && c != EOF) ; 

但是,请注意应该谨慎使用,丢弃用户输入是危险的。

阅读这个关于这个主题的C FAQ ,以及关于冲洗stdin的解释 。

 #include #include #define size 5 void main() { char *str,*name[size]; int i,n; scanf("%d",&n); printf("%d",n); fflush(stdin); // using fflush here gets() isn't skipping else i have to use scanf() for(i = 0; i < n; i++) { str = (char*)malloc(20*sizeof(char)); printf("enter a name :\n"); //scanf("%s",str); gets(str); name[i]=str; } printf("the entered names :\n"); for(i = 0; i < n; i++) puts(name[i]); }