首页 文章

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

提问于
浏览
-1

我有一个从文本文件中读取字符串的函数,并将它们存储在一个最大为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

    假设MAXCARPORLINHA为80个字符为82,另外一个用于换行,一个用于终止零 .
    使用 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);
    }
    
  • 0

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

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

相关问题