赢得猜词游戏时无法终止 for 循环

标签 c loops break

我已经为猜词游戏编写了代码;

  1. 代码从单词文件中随机抽取一个单词,文件中每行有“1”个单词。

  2. 代码然后将此单词转换为星号并在代码运行时显示它。

  3. 它会提示运行该程序的人输入一个字母。如果该字母正确,则该字母对应的星号将成为该字母。如果不是,程序会提示进行另一次猜测。

尝试次数由用户在程序运行时设置。该程序称为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;
            }
        }

最佳答案

如果我正确理解你的问题,你只是想找到正确的逻辑来终止你的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++;
        }
    }   
}

关于赢得猜词游戏时无法终止 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54065590/

相关文章:

jquery添加子元素属性

python - 如何解决 Python 中的 StopIteration 错误?

MPICH2 中特定等级执行的核心绑定(bind)表示 sched_setaffinity : Invalid argument.

C:来自用户的未知输入

python - 如果列表(a)中的项目存在于列表(b)中,则通过更大的列表(b)迭代列表(a)以给出真/假值

r - 在 R 中创建预测误差最小值的 ARIMA 模型

c++ - 在 switch 语句中使用 continue

python - 如何在 python 的内部 for 循环中中断 while 循环?

c - 在char中分配一个以上的字符

c++ - 除了LAME MP3之外,还有哪些开源的C/C++音频压缩选项?