计算C中txt文件一行中的字符数

时间:2018-12-09 19:19:00

标签: c arrays file text

我有一个函数,可以从文本文件中读取字符串,并将它们存储在最多1000行和81列(80个有用字符和\0)的二维数组中。

在将文本文件插入数组之前,如何在该文本文件的一行中引入一个检测器来检测多少个字符?

因为该练习表明该文本文件每行最多只能包含80个字符(有用),但是我现在的功能是,如果该文件超过80个,它将继续将字符串读取到下一行数组。如何使文本文件中的行在\n之前包含79个以上的字符,并返回错误消息?

这是我现在读取文件的功能:

int lerficheiro(char texto[MAXLINHAS][MAXCARPORLINHA]) 
{
    FILE * fp;
    fp = fopen("tudomaiusculas.txt", "r");
    if(fp==NULL)
    {
        printf("Erro ao abrir o ficheiro.");
        return (-1);
    }
    while(!feof(fp))
    {
        for(int linha = 0; linha < MAXLINHAS; linha++)
        {
            fgets(texto[linha], MAXCARPORLINHA, fp);
        }
    }
    fclose(fp);
    for(int linha = 0; linha < MAXLINHAS; linha++)
    {
        for(int coluna = 0; coluna < MAXCARPORLINHA; coluna++)
        {
            if(texto[linha][coluna] >= 97 && texto[linha][coluna] <= 122)
            {
                printf("O ficheiro contem letras minusculas, a terminar.");
                return (-1);
            }
        }
    }
    return (1);
}

2 个答案:

答案 0 :(得分:0)

您可以添加一个计数器,每次它将一个字符复制到文件时,在fgets下将其递增1,然后添加一个if语句以打印错误

count++
if(count>=79){
printf("too many characters");
return;
}

答案 1 :(得分:0)

假设MAXCARPORLINHA是82个80个字符,加上一个换行符和一个终止零。
使用strchr测试换行符。如果找不到,请继续阅读直到找到换行符并设置一个标志。

int lerficheiro(char texto[MAXLINHAS][MAXCARPORLINHA])
{
    FILE * fp;
    fp = fopen("tudomaiusculas.txt", "r");
    if(fp==NULL)
    {
        printf("Erro ao abrir o ficheiro.");
        return (-1);
    }
    int linha = 0;
    while(fgets(texto[linha], MAXCARPORLINHA, fp))
    {
        int toolong = 0;
        while ( ! strchr ( texto[linha], '\n'))//check for newline. loop if no newline
        {
            if ( ! fgets(texto[linha], MAXCARPORLINHA, fp))//read more characters
            {
                break;//found eof
            }
            toolong = 1;//set flag
        }
        if ( ! toolong)
        {
            texto[linha][strcspn ( texto[linha], "\n")] = 0;//remove newline
            linha++;//increment to next line
            if ( linhas >= MAXLINHAS)
            {
                 break;
            }
        }
    }
    fclose(fp);
    for(int linha = 0; linha < MAXLINHAS; linha++)
    {
        for(int coluna = 0; coluna < MAXCARPORLINHA; coluna++)
        {
            if(texto[linha][coluna] >= 'a' && texto[linha][coluna] <= 'z')
            {
                printf("O ficheiro contem letras minusculas, a terminar.");
                return (-1);
            }
        }
    }
    return (1);
}