Проблема с вложенным циклом - PullRequest
1 голос
/ 05 декабря 2011

В настоящее время я работаю над программой, которая просит пользователя ввести секретное слово.Затем вводимые пользователем данные сравниваются со списком слов в текстовом файле.У пользователя есть 3 шанса для ввода слова.Если все правильно, программа перезапускает цикл.Это продолжается до тех пор, пока все слова не будут правильно угаданы.Если слово неверно угадано 3 раза, программа должна завершиться.Моя проблема с циклом 3 догадки.Я могу заставить его работать, если он не вложен в цикл while, однако с циклом while он продолжает запрашивать неверное слово.Что мне не хватает?Вот мой код:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
   //Step 1: open file and declare variables//
   FILE *fp;
   fp = fopen("secretwords.txt","r");
   char guess[20];
   char secret[20];
   int i;

   //Step 2: Check that file opened correctly, terminate if not//
   if (fp == NULL) 
   {
      printf("Error reading file\n");
      exit (0);
      fclose(fp);
   }
   //Step 3: Create loop to run for each word to run to end of file//

   while(fscanf(fp,"%s", secret)!=EOF)
   {         
      for (i=0; i < 3; i++)
      {
         printf("Please guess the word: \n");
         scanf("%s", guess);

         if (strcmp(secret,guess)==0)
         {
            printf("Your guess was correct\n");
            break;
         }

         else
         {
           printf("Your guess was incorrect. Please try again\n");
         }
      }   
   }
   return 0;
}

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

Когда вы делаете break, вы отключаетесь от цикла for, но не от цикла while.

Чтобы решить эту проблему, вы можете изменить конструкцию, чтобы иметь только один цикл,или вы должны иметь инструкцию break во внешнем цикле.

1 голос
/ 05 декабря 2011

Вы не делали перерыв в следующей части:

else
{
    if(i == 2)
        break;
    printf("Your guess was incorrect. Please try again\n");
}
1 голос
/ 05 декабря 2011

Подсказка: если у пользователя было 3 промаха, значение i после цикла for будет равно 3. Это ваш шанс что-то сделать (завершить программу).

...