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には、1行に1つの単語しかありません。

コードの実行中、ユーザーが試行するたびに(つまり、ユーザーが文字を入力した後) 、条件が満たさno common letters...%d chances to go\n",kれていてもステートメントが表示されます。flag > 0

これを修正するにはどうすればよいですか?

4

3 に答える 3

0

この線

 scanf("%c",&check);

改行を含む、ユーザーが入力した文字を読み取っています。

おそらく、行の最初の文字を読みたいだけです。fgets()を使用して行全体を読み、次にを設定しcheck = line[0]ます。

于 2012-10-25T17:42:39.130 に答える
0
printf("%d\n",i);
scanf("%c",&check);

これらのステートメントにより、scanf は \n をパラメーターとして使用するため、毎回「no common letters...」を出力します。上記のコードを次のように置き換えます。

printf("%d",i);
scanf("\n%c",&check); 
于 2013-02-05T19:55:17.770 に答える
-1

文字列をscanfに渡したいと思うので、試してみてください:

scanf("%s",&check);

于 2012-10-25T17:58:35.410 に答える