2011-08-29 66 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