我有一个.txt文件,我想用C读取。每个字符都应该是一个col,每行应该是一行。 我想将行和列的数量存储在一个int变量中。 我是这样做的。我的行号是正确的,但我的列是0。
...
int rows_i = 0;
int cols_i = 0, cols = 0;
FILE* file = fopen(file_name, "r");
if (file) {
while ((c = fgetc(file)) != EOF) {
if (c == '\n') {
break;
}else if (c !='\0') {
rows_i++;
} else {
cols_i++;
if(cols_i> cols){
cols = cols_i;
cols_i = 0;
}
}
}
} else {
printf("No such file!");
return ...;
}
....
知道为什么吗?
我的行输出正确。 cols的输出始终为0。
答案 0 :(得分:1)
根据您的代码,您的输出是正确的。这没有任何错误。看这里:-
while ((c = fgetc(file)) != EOF) {
if (c == '\n') {
break;
}else if (c !='\0') {
rows_i++;
} else {
cols_i++;
if(cols_i> cols){
cols = cols_i;
cols_i = 0;
}
}
}
在else if (c !='\0') rows_i++;
行中,您为每个不是 null字符的字符增加rows_i++
。如果要计算rows
和cols
,请修改此部分:-
if (c == '\n') {
break;
}else if (c !='\0') {
rows_i++;
} else {
cols_i++;
if(cols_i> cols){
cols = cols_i;
cols_i = 0;
}
}
到
if( c == '\n')
rows_i++;
else
cols_i++;
更新:如果要计算每行中的列数,请使用fgets()
来读取一行,然后使用strlen()
来查找{{1} }。
考虑一下:
char
在此程序中,我们从文件中获得#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int rows = 0;
FILE *file = fopen(filename, "r");
char buffer[1000] = {'\0'};
if ( file )
{
while( fgets(buffer, sizeof(buffer), file) != NULL)
printf("Row %d\tCols %d\n", ++rows, strlen(buffer));
}
else
{
printf("There's no such file.\n");
exit(1);
}
fclose(file);
return 0;
}
行并将其存储到a
中。然后我们打印其行号。 ,在每次循环后将增加1,并打印其列号,该列号始终等于。该行中的字符。 buffer
将计算除strlen
以外的每个字符。