2011-08-29 113 views
1

我正在为我自己的个人休闲和学习项目工作。部分原因是这样的:获取(string#)函数跳过第一个获取请求

#include<stdio.h> 
#include<string.h> 
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; 

} 

我的问题是输出跳过第一个“获取(串#)”,并继续到下一个 的“printf()”。有人能告诉我为什么这是吗?

+1

'wgame()'应该是'int wgame(void)'。 *永远不要使用'gets()';它不能安全使用,并且正在从语言中删除。使用有意义的变量名。避免使用“幻数”('11','12')。缩进你的代码。 –

回答

4

很可能您在wgame之前做了一些scanf,在stdio缓冲区中留下了\n

这里有一些事情你应该做的:

  • 请勿混用scanfgets
  • 不要使用gets。使用fgets
  • 不要听别人暗示fflush(stdin)。这是错误的

以极大的关怀和节制,你可以使用:

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

不过,要知道它应谨慎使用,丢弃用户输入是很危险的。

关于这个问题,请阅读C FAQ以及关于flushing stdin的explanation

0
#include<stdio.h> 
#include<stdlib.h> 
#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]); 
    } 
+1

你可能想解释一下你在做什么,对于将来面临类似问题的人:) – Neograph734