Подсчет количества символов в строке текстового файла в C - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть функция, которая читает строки из текстового файла и сохраняет их в двумерном массиве с максимум 1000 строк и 81 столбцом (80 полезных символов и \0).

Как я могу представитьдетектор количества символов в одной строке этого текстового файла, прежде чем я вставлю его в массив?

Поскольку в упражнении говорится, что текстовый файл может содержать не более 80 символов (полезно) в каждой строке, но моя функция в данный момент выполняет следующее: если он содержит более 80, он просто продолжает читать строку вследующая строка массива.Как сделать так, чтобы, если строка в текстовом файле содержала более 79 символов до \n, она возвращала сообщение об ошибке?

У меня есть функция, которая читает файл прямо сейчас:

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 голосов
/ 09 декабря 2018

Предполагается, что 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);
}
0 голосов
/ 09 декабря 2018

Вы можете добавить счетчик, и каждый раз, когда он копирует символ в файл, увеличивая его на 1 под fgets, затем добавляйте оператор if для вывода ошибки

count++
if(count>=79){
printf("too many characters");
return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...