【发布时间】:2021-05-30 00:15:38
【问题描述】:
我需要编写一个程序,要求用户输入字符串,每个字符串在用户按下“Enter”时结束。
- 程序需要接收文件名作为参数,每次操作都应打开和关闭文件,并且对于输入的每个字符串,程序应将字符串附加到文件末尾(在新行上)。
这是我目前的代码:
int is_file_exists(char *file_name)
{
FILE *file;
if ((file = fopen(file_name,"r"))!=NULL)
{
/* file exists */
fclose(file);
return 1;
}
else
{
//File not found, no memory leak since 'file' == NULL
//fclose(file) would cause an error
return 0;
}
}
int main(int argc, char **argv)
{
char c;
FILE *file;
if (argc >= 2)
{
if (is_file_exists(argv[1]))
{
file = fopen(argv[1], "w");
}
else
{
return 0;
}
}
else
{
file = fopen("file.txt", "w");
}
while ((c = getchar()) != EOF)
{
putc(c, file);
}
return 0;
}
到目前为止,代码已编译并正在创建文件,但其中没有写入任何内容。
编辑:我还需要一些函数指针,请参阅我的 cmets on selected answer
【问题讨论】:
-
首先
c必须是int,因为EOF是int。事实上,循环永远不会结束。其次,您是否退出程序,如果是,如何退出?我问是因为您没有关闭或刷新文件。如果您还没有退出程序或者如果您强制终止程序,它可能无法正确写入文件。 -
你检查过你终端当前位置file.txt的内容吗?
-
@AntoninGAVREL 是的。我正在通过“ls”和“gedit”或“cat”重新检查。
-
@kaylum 我已将其更改为 int 但它仍然没有写入文件。我通过 CTRL+Z 退出程序,稍后我需要添加一个特殊的“exit”输入,如果键入它将终止程序。
-
在 Linux 上? ctrl-z 暂停程序。尝试 ctrl-d 发送 EOF。