嵌套for循环问题

时间:2011-12-05 10:31:20

标签: c for-loop nested-loops

我正在制作一个要求用户输入密码的程序。然后将用户的输入与文本文件上的单词列表进行比较。用户有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 个答案:

答案 0 :(得分:3)

执行break时,您会从for循环中断,而不是从while循环中断。

要解决此问题,您可以将设计更改为仅包含一个循环,或者您也应在外循环中使用break指令。

答案 1 :(得分:1)

提示:如果用户有3次未命中,则for循环后i的值将等于3.这是你做某事的机会(终止程序)。

答案 2 :(得分:1)

您没有在以下部分中断:

else
{
    if(i == 2)
        break;
    printf("Your guess was incorrect. Please try again\n");
}