计算C中文本文件每行的字符数
counting the number of characters per line from a text file in C
所以我正在尝试计算文本文件每一行中的字符数。我已经成功地计算了它们,但似乎无法计算文本的最后一行。这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 1000
#define NEWLINE '\n'
int
main(int argc, char*argv[]){
int bytes =-1, lines = 1;
char x,line[MAXLINE];
FILE *file;
file = fopen("no.txt","r");
printf("s0: query = \"%s\"\n",argv[1]);
printf("---\n");
if (file == NULL){
printf("File doesn't exist \n");
exit(EXIT_FAILURE);
}
while( fgets (line, 1000, file)!=NULL )
{
printf("%s",line);
while((x = getchar())!= EOF ){
bytes +=1;
if (x == NEWLINE){
printf("S1: line %6d, bytes = %3d\n---\n",lines,bytes);
bytes = -1;
break;
}
}
lines +=1;
}
fclose(file);
return 0;
}
这个循环:
while((x = getchar())!= EOF ){
正在从控制台而不是从文件中读取。那可能不是你想要的。您已经使用 fgets
从文件中读取了一行,所以您只需要使用 strlen
来查看它有多长。但是,由于 fgets
将换行符留在缓冲区中,因此您需要先通过将 NULL 字节替换为换行符来将其删除。
所以你的主循环应该是这样的:
while( fgets (line, 1000, file)!=NULL )
{
line[strlen(line)-1] = 0; // remove newline
printf("%s\n",line); // print a newline, since the line no longer contains one
printf("S1: line %6d, bytes = %3d\n---\n",lines,strlen(line));
lines +=1;
}
所以我正在尝试计算文本文件每一行中的字符数。我已经成功地计算了它们,但似乎无法计算文本的最后一行。这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 1000
#define NEWLINE '\n'
int
main(int argc, char*argv[]){
int bytes =-1, lines = 1;
char x,line[MAXLINE];
FILE *file;
file = fopen("no.txt","r");
printf("s0: query = \"%s\"\n",argv[1]);
printf("---\n");
if (file == NULL){
printf("File doesn't exist \n");
exit(EXIT_FAILURE);
}
while( fgets (line, 1000, file)!=NULL )
{
printf("%s",line);
while((x = getchar())!= EOF ){
bytes +=1;
if (x == NEWLINE){
printf("S1: line %6d, bytes = %3d\n---\n",lines,bytes);
bytes = -1;
break;
}
}
lines +=1;
}
fclose(file);
return 0;
}
这个循环:
while((x = getchar())!= EOF ){
正在从控制台而不是从文件中读取。那可能不是你想要的。您已经使用 fgets
从文件中读取了一行,所以您只需要使用 strlen
来查看它有多长。但是,由于 fgets
将换行符留在缓冲区中,因此您需要先通过将 NULL 字节替换为换行符来将其删除。
所以你的主循环应该是这样的:
while( fgets (line, 1000, file)!=NULL )
{
line[strlen(line)-1] = 0; // remove newline
printf("%s\n",line); // print a newline, since the line no longer contains one
printf("S1: line %6d, bytes = %3d\n---\n",lines,strlen(line));
lines +=1;
}