#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
。
我该如何纠正?
答案 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”,&安培;检查);