Печать строк из текстового файла в обратном порядке

c

497 просмотра

2 ответа

Я пытаюсь прочитать в Конституции как текстовый файл из командной строки в моей программе, чтобы распечатать строки в обратном порядке. Мой цикл for выглядит следующим образом:

for(int i = 0; i >= 0; i--) {
    if(strings[i] == '\0') //counts through array until it finds a line break
    { 
        break;
    }
    printf("%s", strings[i]);
}

Когда программа запускается, единственное, что печатает, это первая строка Конституции. Если я изменяю цикл for для увеличения i, программа работает плавно и выводит конституцию как обычно, и поэтому я считаю, что вся моя проблема суммируется в этом цикле for. Это остальная часть моей программы для справки.

int clearBuffer() {
    char junk;
    while((junk = getchar()) != feof(stdin) && junk != '\n');
    return 0;
}

int getAline(char ** bufferPointer, int * sizePointer){ 
    char * buffer = *bufferPointer;
    int count = 0;
    int size = *sizePointer;
    while(!feof(stdin)){
        if(count >= size - 1){
            char * tempBuffer = (char * )malloc(size * 10); 
            //strcpy(tempBuffer, buffer );
            for (int i = 0; i < size; i++){
                tempBuffer[i] = buffer[i];
                //putchar(tempBuffer[i]);
            }
            free(buffer);
            buffer = tempBuffer;
            size *= 10;
        }
        buffer[count] = getchar();

        if(buffer[count] == '\n'){
            break;      
        }
        if(buffer[count] == EOF){
            buffer[count] = '\0';
            break;
        }

        count++;
    }
    *bufferPointer = buffer;
    *sizePointer = size;
    return count-1;
    }

int main(){

    char * buffer;

    char * strings[1000]; 


    int arrayCount =0;
    int size = 10;

    while(!feof(stdin))
    {
        buffer= (char*) malloc(size);
        getAline(&buffer, &size);

        strings[arrayCount++] = buffer;
    }

    for(int i = 0; i >= 0; i--) {
        if(strings[i] == '\0'){
            break;
        }
        printf("%s", strings[i]);
    }
    return 0;
}
Автор: Emma Barrett Источник Размещён: 12.11.2019 09:53

Ответы (2)


1 плюс

Решение

Сделайте int i равным количеству строк в Конституции вместо 0, которое должно это сделать.

Автор: Sam K9 Размещён: 29.09.2016 03:47

3 плюса

Когда вы меняете направление итерации цикла, вы также должны поменять местами начальное и конечное значения.

for(int i = arrayCount-1; i >= 0; i--)

Теперь этот цикл начинается в конце, а затем возвращается обратно к началу массива.

Автор: Jonny D Размещён: 29.09.2016 03:57
Вопросы из категории :
32x32