首页 > 解决方案 > 如何正确显示编辑后的文件输出?

问题描述

我正在尝试制作一个字符生成器/编辑器,并且我想在控制台屏幕上显示所有已保存字符的列表。

我设法使列表正常工作,但输出存在小问题。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void main(){
    CreateDirectory("Characters",NULL);
    CreateDirectory("Characters\\some random name",NULL);
    CreateDirectory("Characters\\another random name",NULL);
    system("dir /b/aD \Characters > character_list.txt");

    FILE *f;

    char Name[50];
    int c, i=1;

    f = fopen("character_list.txt", "r");
        if(f == NULL){
            printf("Could not open character list");
            return;
        }
        printf("Choose character to edit:\n1) ");
        if(f)
            while((c=getc(f)) != EOF){
                if(c=='\n'){
                    putchar(c);
                    printf("%d) ", ++i);
                }
                else putchar(c);
            }
    fclose(f);
    return;
}

对于两个创建的字符,输出如下所示:

Choose character to edit:
1) some random name
2) another random name
3)

这就是问题所在。如何删除最后一点,使其看起来像这样?

Choose character to edit:
1) some random name
2) another random name

标签: cfile-iooutput

解决方案


换行符终止当前行,并不意味着后面会有更多字符。所以你得到“空” 3),因为在最后一个新行之后没有更多的字符可以读取。因此,我将引入一个变量,指示是否%d)在下一次运行中打印计数器(即仅当后面有更多字符时):

        int beginOfNewLine = 1;
        while((c=getc(f)) != EOF){
            if (beginOfNewLine) {
                printf("%d) ", ++i);
                beginOfNewLine = 0;
            }
            if(c=='\n'){
                beginOfNewLine = 1;  // trigger to print the counter in the next run
            }
            putchar(c);
        }

推荐阅读