2012-10-25 81 views
0
#include<stdio.h> 
#include<string.h> 
#include<time.h> 
#include<stdlib.h> 
typedef struct dic { 
    int index; 
    char string[10]; 
    struct dic *next; 
}node; 
main() { 
    FILE *fp;int indexrand;node *head;node *mainhead; 
    char s[10],question[10],answer[10];char check; 
    int count=-1,i,j,k,len,flag;head=(node *) malloc(sizeof(node)); 
    mainhead=head; 
    fp=fopen("dictionary.txt","r"); 
    while((fgets(s,10,fp))!=NULL) { 
     strcpy(head->string,s); 
     count++; 
     (head->index)=count; 
     head->next=(node *)malloc(sizeof(node)); 
     head=head->next; 
    } 
    fclose(fp); 
    head->next=NULL; 
    srand(time(NULL)); 
    indexrand=rand()%(count+1); 
    printf("%d\n",indexrand); 
    for(head=mainhead;(head->next)!=NULL;head=head->next) 
     if((head->index)==indexrand) 
      strcpy(question,(head->string)); 
    printf("%s\n",question); 
    len=strlen(question); 
    printf("%d\n",len); 
    for(i=0;i<len-1;i++) 
     answer[i]='_'; 
    answer[i]='\0'; 
    printf("%s\n",answer); 
    printf("6 chances to go\n"); 
    for(i=0,k=6;k>0;i++) { 
     flag=0; 
     printf("%d\n",i); 
     scanf("%c",&check); 
     for(j=0;j<(len-1);j++) { 
      if(question[j]==check) { 
       flag++; 
       answer[j]=check; 
      } 
     } 
     if(flag>0) 
      printf("%d chances to go\n",k); 
     if(flag==0) { 
      k--; 
      printf("no common letters...%d chances to go\n",k); 
     } 
     printf("%s\n",answer); 
    } 
} 

文件dictionary.txt每行只有一個字。c中的hang子手控制檯遊戲

運行代碼時,從用戶的每次嘗試(即用戶輸入的字符之後),即使flag > 0條件滿足聲明no common letters...%d chances to go\n",k正在顯示。

我該如何糾正呢?

+0

使用更好的變量名。國旗,我和K不告訴我任何事情。 – stark

+2

爲了得到更好的答案,你應該改進的標題你的問題,編輯你的問題的機構可讀性。因爲它代表你的標題是不是非常有幫助,它應該包含問題的簡要說明。 – user7116

+3

不要運行所有的聲明一起這樣。添加一些評論。 –

回答

0

scanf("%c",&check); 

被讀取字符的用戶類型,包括換行

你可能只是想讀就行的第一個字符:用fgets()讀取整個行,然後設置check = line[0]

+1

...或簡單地忽略任何非字母字符(使用'isalpha') – paddy

-1

我想你想傳遞一個字符串scanf函數,所以試試吧:

的scanf( 「%S」,&檢查);

+2

除了「檢查」只是一個字符,而不是一個字符數組,所以沒有不只是一個角色的空間。 – Grandpa

0
printf("%d\n",i); 
scanf("%c",&check); 

因爲這些語句,scanf函數正在\ n作爲參數,所以在印刷「沒有共同的信......」每time.Replace上面的代碼與

printf("%d",i); 
scanf("\n%c",&check);