2013-12-11 61 views
0

我認爲它可能是某種類型的內存泄漏,當試圖讀取.txt文件。它只是停止響應和崩潰,我一般對編程相當陌生。當試圖在eclipse上運行程序時,它崩潰

這是總的不完整的代碼:

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

#define MAXNUMWORDS 100 
#define MAXWORDLENGTH 60 

void gallows(int i) { 
switch (i) { 
case 0: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf("\n"); 
    printf("\n"); 
    printf("\n"); 
    printf("\n"); 
    printf("\n"); 
    printf("\n"); 
    printf("____________\n\n"); 
    break; 
case 1: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf("\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf("__|_________\n\n"); 
    break; 
case 2: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf("__|_________\n\n"); 
    break; 
case 3: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |/\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf("__|_________\n\n"); 
    break; 
case 4: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |/ | \n"); 
    printf(" | O \n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf(" |\n"); 
    printf("__|_________\n\n"); 
    break; 
case 5: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |/ | \n"); 
    printf(" | O \n"); 
    printf(" | |\n"); 
    printf(" | |\n"); 
    printf(" |\n"); 
    printf("__|_________\n\n"); 
    break; 
case 6: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |/ | \n"); 
    printf(" | O \n"); 
    printf(" | \\|\n"); 
    printf(" | | \n"); 
    printf(" |\n"); 
    printf("__|_________\n\n"); 
    break; 
case 7: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |/ | \n"); 
    printf(" | O \n"); 
    printf(" | \\|/\n"); 
    printf(" | | \n"); 
    printf(" |\n"); 
    printf("__|_________\n\n"); 
    break; 
case 8: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |/ | \n"); 
    printf(" | O \n"); 
    printf(" | \\|/\n"); 
    printf(" | | \n"); 
    printf(" | /\n"); 
    printf("__|_________\n\n"); 
    break; 
case 9: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |/ | \n"); 
    printf(" | O \n"); 
    printf(" | \\|/\n"); 
    printf(" | | \n"); 
    printf(" | /\\\n"); 
    printf("__|_________\n\n"); 
    break; 
case 10: 
    printf("Amount of wrong letters: %d\n\n", i); 
    printf(" _______\n"); 
    printf(" |/ | \n"); 
    printf(" | X \n"); 
    printf(" | \\|/\n"); 
    printf(" | | \n"); 
    printf(" | /\\\n"); 
    printf("__|_________\n\n"); 
    break; 
} 

} INT主(){

 printf("Welcome to Hangman!\n"); 
     printf(" /-----| \n"); 
     printf(" |  \n"); 
     printf(" |  \n"); 
     printf(" |  \n"); 
     printf(" |  \n"); 
     printf(" __|______\n"); 

     srand(time(NULL)); 

     char WordList[MAXNUMWORDS][MAXWORDLENGTH]; 
     int WordsReadIn = 0; 

     FILE *pToFile = fopen("dictionary.txt", "r"); 

     if (pToFile == NULL) { 
      printf("Failed To Open File\n"); 
      return 0; 
     } 

     char input[100]; 

     while (fgets(input, 100, pToFile)) { 
      sscanf(input, "%s", WordList[WordsReadIn]); 

     } 

     printf("Total Words Read In:%d\n", WordsReadIn); 

     fclose(pToFile); 

     // index for random word 
     int randomIndex = rand() % WordsReadIn; 

     int numLives = 5; 
     int numCorrect = 0; 
     int oldCorrect = 0; 

     int lengthOfWord = strlen(WordList[randomIndex]); 

     //      0 1 2 3 4 5 
     //      p u r p l e 
     // letterGuessed[8] = { 0,0,0,0,0,0,0,0 }; 
     int letterGuessed[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; 

     int quit = 0; 

     int loopIndex = 0; 
     int reguessed = 0; // EDIT 

     char guess[16]; 
     char letterEntered; 

     // game loop  
     while (numCorrect < lengthOfWord) { 

      printf("\n\nNew Turn....\nHangman Word:"); 

      for (loopIndex = 0; loopIndex < lengthOfWord; loopIndex++) { 

       if (letterGuessed[loopIndex] == 1) { 
        printf("%c", WordList[randomIndex] [loopIndex]); 
       } else { 
        printf("-"); 
       } 

      } 

      printf("\n"); 

      printf("Number Correct So Far:%d\n", numCorrect); 
      printf("Enter a guess letter:"); 
      fgets(guess, 16, stdin); 

      if (strncmp(guess, "quit", 4) == 0) { 
       quit = 1; 
       break; 
      } 

      letterEntered = guess[0]; 
      reguessed = 0; 

      printf("letterEntered:%c\n", letterEntered); 

      oldCorrect = numCorrect; 

      for (loopIndex = 0; loopIndex < lengthOfWord; loopIndex++) { 

       if (letterGuessed[loopIndex] == 1) { 
        if (WordList[randomIndex][loopIndex] == letterEntered) { 
         reguessed = 1; 
         break; 
        } 
        continue; 
       } 

       if (letterEntered == WordList[randomIndex][loopIndex]) { 
        letterGuessed[loopIndex] = 1; 
        numCorrect++; 
       } 

      } 

      if (oldCorrect == numCorrect && reguessed == 0) { 
       numLives--; 
       printf("Sorry, wrong guess\n"); 
       if (numLives == 0) { 
        break; 
       } 
      } else if (reguessed == 1) { 
       printf("Already Guessed!!\n"); 
      } else { 
       printf("Correct guess :)\n"); 
      } 

     } // while loop 

     if (quit == 1) { 
      printf("\nthe user quit early\n"); 
     } else if (numLives == 0) { 
      printf("\nSorry you lose, the word was: %s\n", 
        WordList[randomIndex]); 
     } else { 
      printf("\nYOU WIN!!! :)\n"); 
     } 

     return 0; 
    } 

回答

1

WordsReadIn似乎不被遞增,從而可能導致一個除以0

此循環:

while (fgets(input, 100, pToFile)) { 
     sscanf(input, "%s", WordList[WordsReadIn]); 

    } 

我爲寫:

while (fgets(input, 100, pToFile)) { 
     sscanf(input, "%59s", WordList[WordsReadIn]); 
     ++WordsReadIn; 
    } 
+0

我應該怎樣做,以便它讀入.txt文件?並且在它後面有一個新的「WordsReadIn ++」,因此它有一個值? – Gaddi

+0

謝謝,它現在讀入!現在要弄清楚爲什麼有一個無限循環 – Gaddi

相關問題