我已经为猜词游戏编写了代码;
该代码从一个单词文件中提取一个随机单词,在该文件中,每行有“ 1”个单词。
然后代码将这个单词转换为星号,并在运行代码时显示出来。
尝试次数由用户在程序运行时设置。该程序称为 wordguess ,因此在命令提示符下使用“ wordguess filename.txt n” 运行。
filename.txt 是指包含要选择的单词的文件。 n 是指在输掉游戏之前允许用户尝试的次数。如果某人在所选尝试次数内未猜到单词,我可以使游戏完成,但如果该人获胜,我似乎无法完成游戏。如果猜对了单词,则循环将继续进行,直到该人用完所有猜测为止。我不确定在循环中应该放置什么条件来促进获胜。我尝试了各种if语句,但是尝试时这些代码无法运行。
//taking random word from file
srand(time(0));
f = fopen(argv[1], "r");
while (!feof(f))
{
fgets(word, 1024, f);
word[strcspn(word, "\n")] = '\0';
nL++;
}
randomline = rand() % nL;
fseek(f, 0, SEEK_SET);
for (i = 0; !feof(f) && i <= randomline; i++)
fgets(word, 1024, f);
word[strcspn(word, "\n")] = '\0';
strcpy(astword, word); //copies word to another char
for (i = 0; i < strlen(astword); i++)
{
astword[i] = '*'; //copy is converted to asterisks
}
int counter = 0;
for (i = 0; i < tries; i++)
{
printf("%s \n", astword);
printf("guess a letter\n");
scanf(" %c", &guess);
for (i = 0; i < tries; i++)
{
printf("%s \n", astword);
printf("guess a letter\n");
scanf(" %c", &guess);
for (j = 0; j < tries; j++)
{
if (guess == word[j])
astword[j] = guess;
}
}
我缺少明显的东西吗?
编辑:根据Ozan的回答,我修改了我的循环,但它似乎没有用;
for (j = 0; j < tries; j++)
{
if (guess == word[j])
{
astword[j] = guess;
counter++;
}
if (counter == strlen(astword))
{
break;
}
}
答案 0 :(得分:-1)
如果我正确理解了您的问题,则只想找到正确的逻辑来终止 for循环。如果您想在用户正确猜对所有字母后终止循环,则可以通过计算程序进行了多少次星号->字母替换以及当计数达到计数时来管理循环该单词的字母,那么该是时候终止循环了,因为这意味着不再有星号可以猜测,并且单词及其所有丢失的字母都可以正确猜到。
在您程序的以下代码块中(发生替换的 );
for (j = 0; j < tries; j++){
if (guess == word[j])
astword[j] = guess;
}
只需添加一个计数器即可计算将星号(*)替换为字母的次数;
for (j = 0; j < tries; j++){
if (guess == word[j]){
astword[j] = guess;
counter++; // int variable, initialized to 0 before for loop starts
}
}
然后在外部 for循环的开头,添加 if语句,以检查counter
是否等于strlen(astword)
; >
if (counter == strlen(astword))
break; // if the replacement action is occured with the same number of word's lenght, break the loop.
因此,作为上述代码的组合,您的 for循环必须正在处理这种中断情况;
for (i = 0; i < tries; i++){
if (counter == strlen(astword))
break;
printf("%s \n", astword);
printf("guess a letter\n");
scanf(" %c", &guess);
for (j = 0; j < tries; j++)
{
if (guess == word[j]){
astword[j] = guess;
counter++;
}
}
}