Как остановить чтение строк из текстового файла, когда они пусты - PullRequest
0 голосов
/ 09 декабря 2018

Итак, я использую fgets для получения строк из текстового файла в разные строки массива, каждая строка является строкой.Но в конце концов, когда я запускаю программу, а затем записываю вывод в другой текстовый файл, и он записывает полезные строки, все правильно, но после последней, так как мне нужно использовать определение строк массива со значением 1000,он печатает ненужные, случайные символы.Я попытался получить int, который читает полезные строки, которые он читает из первого текстового файла, но не работал.Также пытался использовать if (array [line] == '\ 0') break;не работалКак мне сделать так, чтобы он останавливал fprintf после последней полезной строки?Спасибо, это код, который я должен написать и зашифровать мои строки.

void cifrar(char texto[MAXLINHAS][MAXCARPORLINHA], unsigned int cifra)
{
    for(int linha = 0; linha < MAXLINHAS; linha++)
    {   
        for(int coluna = 0; coluna < strlen(texto[linha]); coluna++)
        {
            if(texto[linha][coluna] < 'A' || texto[linha][coluna] > 'Z') continue;
            else texto[linha][coluna] = texto[linha][coluna] + cifra;
            if(texto[linha][coluna] > 'Z') texto[linha][coluna] = texto[linha][coluna] - 26;
        }
    }
}

int escreverficheiro(char texto[MAXLINHAS][MAXCARPORLINHA])
{
    FILE * fp;
    fp = fopen("cifrado.txt", "w");
    if(fp==NULL)
    {
        printf("Erro ao escrever ficheiro.");
        return (-1);
    }
    for(int linha = 0; linha < MAXLINHAS; linha++)
    {
        if(texto[linha] == NULL) break;
        fprintf(fp, "%s", texto[linha]);
    }

    fclose(fp);
    return (1);
}

1 Ответ

0 голосов
/ 09 декабря 2018

У вас есть 2-мерный массив , а не массив указателей на строки.(ну, на самом деле внутри функции у вас есть указатель на char[MAXCARPORLINHA], но это указывает на двумерный массив).

texto[linha]

- это одномерный массив символов .За исключением случаев, когда операндом является sizeof, _Alignof или &, массив будет преобразован в указатель на первый элемент.

И поскольку массив является существующим объектом, по определению его адрес не может быть NULL .


Самый простой способ сделать то, что вы хотите, это передать число строк в качестве аргумента типа size_t в функциюи не пытайтесь использовать какое-либо значение "часовой".

int escreverficheiro(size_t n, char texto[][MAXCARPORLINHA])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...