Чтение текстового файла с помощью C-программы приводит к тому, что процессор работает на 100% - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать словарь для маленькой текстовой игры.Я кодировал часть для чтения файла, предполагая, что число строк в файле неизвестно, поэтому я делаю так, чтобы он считывал весь файл один раз в начале выполнения для подсчета строк.Конечной целью было бы заставить его выбрать случайное слово в файле для обработки, поместив его в динамически размещаемый указатель.

Вот код читающей части:

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

//declaration des fonctions :

void main(void){


//Declaration des variables :

unsigned char *motSecret=NULL;   //mot à trouver
unsigned char *motAffich=NULL;       //mot à afficher
unsigned char vide[]="****************************"; //chaine servant à initialisation affichage
unsigned char taille=0,saisie=0,essais=10,flag1=0,flag2=0,i=0,n=0; //variables et compteurs divers
int aleat=0;
FILE *dico=NULL;  //variable qui lit le fichier
srand(time(NULL));

//initialisation du mot aleatoire :

dico=fopen("dico.txt","r");     //ouvre le fichier en lecture
if(dico==NULL)  //gueule si ça n'a pas marché
{printf("###FATAL ERROR : FILE EXPECTED BUT RETURNED NULL###"); exit(0);}
else
{
    while((n=fgetc(dico))!=EOF)
    {
        if(n=='\n') taille++;  //compte le nombre de lignes
    }
fclose(dico);
}
}

Когдапосле этого программа зависает, как будто она обрабатывает неограниченный цикл, и процессор сразу используется на 100%, пока я не заставлю его остановиться с помощью ctrl + c.

Я собираю и запускаю его наLinux с gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.11) 5.4.0 20160609.

Буду признателен за любой совет.

1 Ответ

1 голос
/ 24 сентября 2019

Вы определили

unsigned char n;

, поэтому цикл

while((n=fgetc(dico))!=EOF)

никогда не прекратится, поскольку значение n никогда не будет -1.У вас есть бесконечный цикл, который пытается прочитать после конца файла.

Функция fgetc возвращает значение int, поэтому вы должны иметь

int n;
...