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

时间:2011-12-06 01:16:25

标签: c

我正在尝试以相反的顺序打印文件。我正在使用数组来保存每一行数据。到目前为止,我能够按正常顺序打印每一行。

index是我引用的行数和FuncIndex相同的东西,但已在函数中再次声明。

file = fopen("../quotes.data","r");
while (NumOfField == 8) {
    NumOfField = fscanf(file,"%d,%c,%d,%d,%c,%c,%lf,%lf", &quote[index], &roomletter[index], &length[index], &width[index], &paint[index], &ceiling[index], &cost[index], &setup_cost[index]);
    index++;
}
index--;
fclose(file);


在功能:

int FuncIndex;
for (FuncIndex = 0; FuncIndex <= index; FuncIndex++) {
    printf("\n%5d   %1c   %3d    %3d    %1c      %1c    %8.2lf %6.2lf", quote[FuncIndex], roomletter[FuncIndex], length[FuncIndex], width[FuncIndex], paint[FuncIndex], ceiling[FuncIndex], cost[FuncIndex], setup_cost[FuncIndex]);
}

现在我尝试将for循环更改为:

for (FuncIndex = index; FuncIndex >= 0; FuncIndex--) >

但输出打印为空。虽然当我将0更改为任何数字时,会打印相应的行。

打印的输出是:

Quote Room Length Width Paint Ceiling     Cost  Setup
===== ==== ====== ===== ===== =======  =======  =====
531   A    10     10    b      n       96.00 100.00
531   B    15     15    b      n      144.00   0.00
531   C    20     20    b      n      192.00   0.00

我希望将此输出反转为:

Quote Room Length Width Paint Ceiling     Cost  Setup
===== ==== ====== ===== ===== =======  =======  =====
531   C    20     20    b      n      192.00   0.00
531   B    15     15    b      n      144.00   0.00
531   A    10     10    b      n       96.00 100.00

如果我把输出放在代码部分,请原谅我,因为格式化会改变

谢谢。

2 个答案:

答案 0 :(得分:0)

也许您应该发布所有代码(但是,尝试将其减少到最低限度)。这对我有用:

文件input.txt

530 A
531 B
532 C
#include <stdio.h>
#include <conio.h>

#define MAX_LINES 50

int main()
{
    FILE* file;
    int NumOfField = 2;
    int index = 0;
    char roomLetter[ MAX_LINES ];
    int  quote     [ MAX_LINES ];

    file = fopen("input.txt","r");

    while ( NumOfField == 2 ) {
        NumOfField = fscanf(file,"%d %c\n", &quote[index], &roomLetter[index]);
        index++;
    }
    fclose(file);
    index--;

    for(; index >=0; index-- )
        printf( "%d %c\n", quote[index], roomLetter[index] );

    getch();

    return 0;
}

答案 1 :(得分:0)

好的,这是我的问题的答案:

EOF就是伎俩

for (FuncIndex = index; FuncIndex != EOF; FuncIndex--)

基本上,在这里你要说的是,无论索引的数量是多少(行数)将它放在FuncIndex中然后逐个(从最高的数字)检查每一行,直到它不再是行尾。