【发布时间】:2020-01-24 18:18:11
【问题描述】:
我正在尝试为一个小文本游戏创建字典。 我对文件读取部分进行了编码,假设文件中的行数是未知的,所以我让它在执行开始时读取整个文件一次以计算行数。 最终目标是让它在文件中随机选择一个词进行处理,将其放入动态分配的指针中。
这是阅读部分的代码:
#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 强制它停止。
我正在使用 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609 在 Linux 上编译和运行它。
任何建议将不胜感激。
【问题讨论】:
-
您基本上是在要求我们为您调试。选择一个调试器,试一试,如果您仍有特定问题,请回来。 (et les commentaires en français c'est pas top ;))
-
printf("###FATAL ERROR : FILE EXPECTED BUT RETURNED NULL###"); exit(0);。如果发生致命错误,为什么要以 0 值退出。(这表示没有错误)。为什么该消息没有写入标准错误?错误的原因是什么?哪个文件?if(dico==NULL) { perror("dico.txt"); exit(EXIT_FAILURE);} -
@WilliamPursell 我只是这样写的,为了在出现问题时强制退出,我不需要返回值来执行我正在做的事情,而且我不知道 perror()