我的一个朋友需要在他的一个课程中使用 MATLAB,所以他打电话给我(计算机科学专业的)并问我是否可以教他 C。我熟悉 C++,所以我也熟悉一般语法,但必须阅读 C 的 IO 库。
我正在创建一些简单的 IO 程序给我的朋友看,但是我的第三个程序给我带来了麻烦。当我使用 Eclipse(使用 CDT)在我的机器上运行程序时,Eclipse 的控制台会产生一个有问题的输出,而不是提示我输入数据,它会获取输入,然后使用 FAILURE 一次打印所有内容。
该程序应该从用户那里获取文件名,创建文件并写入文件,直到用户输入一个空行。
当我通过控制台(g++ files2.c)在我的机器上编译/运行它时,系统会提示我正确输入数据,但出现故障,并且没有输出文件。
我认为错误在于我如何使用 char 数组,因为使用 scanf 获取文件名将创建一个功能文件(可能是因为它忽略了空格),但不会进入 while 循环。
#include <stdio.h>
#define name_length 20
#define line_size 80
int main() {
FILE * write_file; // pointer to file you will write to
char filename[name_length]; // variable to hold the name of file
char string_buffer[line_size]; // buffer to hold your text
printf("Filename: "); // prompt for filename
fgets(filename, name_length, stdin); // get filename from user
if (filename[name_length-1] == '\n') // if last char in stream is newline,
{filename[name_length-1] = '\0';} // remove it
write_file = fopen(filename, "w"); // create/overwrite file user named
if (!write_file) {printf("FAILURE");} // failed to create FILE *
// inform user how to exit
printf("To exit, enter a blank line (no spaces)\n");
// while getting input, print to file
while (fgets(string_buffer, line_size, stdin) != NULL) {
fputs(string_buffer, write_file);
if (string_buffer[0] == '\n') {break;}
}
fclose(write_file);
return 0;
}
我应该如何着手修复程序?我几乎没有发现用户终止的输入被写入文件。
现在,请原谅我,我有几个文件要从我大学的 UNIX 服务器上删除,我不能按名称指定它们,因为它们是用复杂的文件名创建的......
编辑 - - -
就像我说的,我能够使用
scanf("%s", filename);
获得一个工作文件名(没有换行符)。但是,无论我是否在 while 循环中使用 scanf 或 fgets,如果我将它们与 scanf 一起用于文件名,我都无法将任何内容写入文件,因为它不会进入 while 循环。
我应该如何重组我对文件的写入和我的 while 循环?