使用 C 程序读取文本文件导致处理器达到 运行 100%
Reading text file with C program cause processor to run at 100%
我正在尝试为一个小型文字游戏创建字典。
我在假设文件中的行数未知的情况下对文件读取部分进行了编码,因此我让它在执行开始时读取整个文件一次以计算行数。
最终目标是让它在文件中随机选择一个词进行处理,并将其放入一个动态分配的指针中。
阅读部分的代码如下:
#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.
如有任何建议,我们将不胜感激。
您已定义
unsigned char n;
如此循环
while((n=fgetc(dico))!=EOF)
永远不会终止,因为 n
的值永远不会是 -1
。您有一个无限循环,它试图读取文件末尾。
函数 fgetc
returns 一个 int
值所以你应该有
int n;
我正在尝试为一个小型文字游戏创建字典。 我在假设文件中的行数未知的情况下对文件读取部分进行了编码,因此我让它在执行开始时读取整个文件一次以计算行数。 最终目标是让它在文件中随机选择一个词进行处理,并将其放入一个动态分配的指针中。
阅读部分的代码如下:
#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.
如有任何建议,我们将不胜感激。
您已定义
unsigned char n;
如此循环
while((n=fgetc(dico))!=EOF)
永远不会终止,因为 n
的值永远不会是 -1
。您有一个无限循环,它试图读取文件末尾。
函数 fgetc
returns 一个 int
值所以你应该有
int n;