从文件C获取行号和列号

时间:2020-06-03 09:46:29

标签: c file row col

我有一个.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。

1 个答案:

答案 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++。如果要计算rowscols,请修改此部分:-

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以外的每个字符。