我在VS Code上更新C代码时遇到问题(版本1.77.0)和/或C语言的Code Runner扩展。问题是我必须运行或重新编译代码两次,以便在修改任何内容后使其保持最新。该程序将键盘输入附加到文本文件中。例如,当我运行程序时,它会询问用户的姓名,然后将其附加到输出文件中。当我修改fprintf函数在名称后添加一个换行符时,它会在我运行代码两次后添加换行符。
#include <stdio.h>
int main()
{
FILE *fPointer;
fPointer = fopen("output.txt", "a");
char name[30];
printf("Please enter your name: ");
scanf("%s", &name);
fprintf(fPointer, "%s", name);
fclose(fPointer);
return 0;
}
我将fprintf(fPointer, "%s", name);
修改为fprintf(fPointer, "%s\n", name);
,以便在输出文件的不同行中获取用户输入。
我运行没有添加换行符的程序版本,输入“myname”并得到:
我的名字
然后我修改代码,以便在将用户输入打印到输出文件时添加一个换行符。
#include <stdio.h>
int main()
{
FILE *fPointer;
fPointer = fopen("output.txt", "a");
char name[30];
printf("Please enter your name: ");
scanf("%s", &name);
fprintf(fPointer, "%s\n", name);
fclose(fPointer);
return 0;
}
在我第一次运行新版本并输入“name 2”后,我得到
mynamename2
应该是的
我的名字
名称2
即使我什么都没做,再次运行程序并输入“name 3”,我得到
mynamename2
名称3
我试着在VS Code和Code Runner扩展中使用自动保存设置,但它们并没有真正改变任何东西。手动保存也不起作用。
1条答案
按热度按时间wz3gfoph1#
你第一次运行程序的第一个版本时,并没有输出一个尾随的换行符。你再次打开这个文件,想用你修改过的文件追加到它后面,你修改过的文件把换行符放在了最后。难怪当它 * 追加 * 到前面的内容时,它并没有在原始内容和新内容之间加一个换行符,而不是在新内容后面放一个换行符。这就是为什么当你第三次打开文件来追加内容时,它会从第二次运行时添加的换行符开始。然后它会在第三次运行的新内容后面添加一个换行符。
一切都在按照它应该的那样运行。
关于数据格式和迁移的一课:当您更改数据格式时,除了更改程序写入/更新数据的方式外,还需要更新现有数据以匹配新格式(您的“新格式”是用换行符结束(“分隔”)每一段数据)