c - 如何正确显示编辑后的文件输出?
问题描述
我正在尝试制作一个字符生成器/编辑器,并且我想在控制台屏幕上显示所有已保存字符的列表。
我设法使列表正常工作,但输出存在小问题。
#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
解决方案
换行符终止当前行,并不意味着后面会有更多字符。所以你得到“空” 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);
}
推荐阅读
- r - 将一列中的值与 R 中的另一列进行比较
- java - 让图像显示为背景
- if-statement - 从 Prolog 中的 if 语句返回一个值
- python - Discord.py fetch_members 缺少访问权限
- javascript - 带有 JavaScript 的雪花 UDF 返回不正确的日期
- kotlin-coroutines - Ktor 如何启动协程?
- javascript - JS检查对象中是否存在对象并将值添加到格式化对象
- rust - 嵌套结构时,future.boxed() 的使用失败并出现生命周期错误
- python - 在 Numpy 数组中提取高于某个阈值的连续值
- julia - 在 JuliaPro 中,我如何获得已注册的包?