为什么当我想计算字符数时 fgets 只有一行
Why fgets just have one line when i want to count the number of char
我试过这个来计算看起来像那样的 .txt 中的字符数
ID2;Orelsan;San;Musiques\Orelsan San.mp3
ID1;Rick Astley;Never Gonna Give You Up;Musiques\Rick Astley - Never Gonna Give You Up.mp3
我写了这个但是 stringsize
等于第 2 行中的字符数
int search(){
FILE *inputFile;
char buffer[255];
int sizestring=0;
inputFile=fopen("bddmp3.txt","rt");
fgets(buffer2,255,inputFile);
while(inputFile!=EOF){
sizestring++;
}
printf("%d",sizestring);
我尝试了另一种使用 strlen
的方法,但我遇到了同样的问题,我只有第一行的长度
FILE *inputFile;
char buffer[255];
int toto;
int stringsize=0;
inputFile=fopen("bddmp3.txt","r");
stringsize= strlen(fgets(buffer,255,inputFile));
printf("taille :%d\n",stringsize);
fgets
returns NULL
(而不是 EOF
)如果没有更多数据可供读取。
你可能想要这个:
inputFile = fopen("bddmp3.txt", "rt");
if (inputFile == NULL) {
.. handle error
}
while (fgets(buffer2,255,inputFile) != NULL) {
sizestring++;
}
这没有意义:
while(inputFile!=EOF){
sizestring++;
}
- 您将
inputFile
与 FILE*
进行比较,而 int
没有任何意义
sizestring++
不可能改变 inputFile
,因此这个循环很可能永远 运行。
一个建议:像这样的程序最好用fgetc()来写,它读取单个字符。然后,您可以检查每个字符并轻松计算行数(通过计算 '\n' 即换行符)或字符总数。使用这种方法,您不需要为每一行分配一个缓冲区(您当前的问题会有一个错误:如果该行超过 255 个字符会发生什么情况?),并且它可以轻松处理具有任意长度行的文件。
使用 fgetc() 读取 character-by-character 并不是低效的,因为在 stdio 库中实现了缓冲。
我试过这个来计算看起来像那样的 .txt 中的字符数
ID2;Orelsan;San;Musiques\Orelsan San.mp3
ID1;Rick Astley;Never Gonna Give You Up;Musiques\Rick Astley - Never Gonna Give You Up.mp3
我写了这个但是 stringsize
等于第 2 行中的字符数
int search(){
FILE *inputFile;
char buffer[255];
int sizestring=0;
inputFile=fopen("bddmp3.txt","rt");
fgets(buffer2,255,inputFile);
while(inputFile!=EOF){
sizestring++;
}
printf("%d",sizestring);
我尝试了另一种使用 strlen
的方法,但我遇到了同样的问题,我只有第一行的长度
FILE *inputFile;
char buffer[255];
int toto;
int stringsize=0;
inputFile=fopen("bddmp3.txt","r");
stringsize= strlen(fgets(buffer,255,inputFile));
printf("taille :%d\n",stringsize);
fgets
returns NULL
(而不是 EOF
)如果没有更多数据可供读取。
你可能想要这个:
inputFile = fopen("bddmp3.txt", "rt");
if (inputFile == NULL) {
.. handle error
}
while (fgets(buffer2,255,inputFile) != NULL) {
sizestring++;
}
这没有意义:
while(inputFile!=EOF){
sizestring++;
}
- 您将
inputFile
与FILE*
进行比较,而int
没有任何意义 sizestring++
不可能改变inputFile
,因此这个循环很可能永远 运行。
一个建议:像这样的程序最好用fgetc()来写,它读取单个字符。然后,您可以检查每个字符并轻松计算行数(通过计算 '\n' 即换行符)或字符总数。使用这种方法,您不需要为每一行分配一个缓冲区(您当前的问题会有一个错误:如果该行超过 255 个字符会发生什么情况?),并且它可以轻松处理具有任意长度行的文件。 使用 fgetc() 读取 character-by-character 并不是低效的,因为在 stdio 库中实现了缓冲。