c中的刽子手控制台游戏

时间:2012-10-25 17:29:46

标签: c linked-list

#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每行只有一个单词。

在运行代码时,对于用户的每次尝试(即在用户输入字符后),即使满足no common letters...%d chances to go\n",k条件,也会显示语句flag > 0

我该如何纠正?

3 个答案:

答案 0 :(得分:0)

该行

 scanf("%c",&check);

正在读取用户输入的字符,包括换行符

您可能只想阅读该行的第一个字符:使用fgets()读取整行,然后设置check = line[0]

答案 1 :(得分:0)

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

由于这些陈述,scanf将\ n作为参数,因此每次都打印“没有常用字母......”。用

替换上面的代码
printf("%d",i);
scanf("\n%c",&check); 

答案 2 :(得分:-1)

我想你想把一个字符串传递给scanf,所以试试吧:

的scanf( “%S”,&安培;检查);