以相反的顺序从文本文件中打印行

时间:2016-09-29 03:42:26

标签: c

我试图将宪法中的文本文件从命令行读入我的程序,以相反的顺序打印出行。我的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;
}

2 个答案:

答案 0 :(得分:3)

当您反转循环的迭代方向时,您还必须反转开始值和结束值。

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

现在,这个循环从最后开始,然后返回到数组的开头。

答案 1 :(得分:1)

使int i等于宪法中的行数而不是0应该这样做。