私の友人はクラスの1つにMATLABを使用する必要があるので、彼は私(コンピューターサイエンス専攻)に電話して、Cを教えてもらえないかと尋ねました。私はC ++に精通しているので、一般的な構文にも精通しています。しかし、CのIOライブラリを読み上げる必要がありました。
友達に見せるために簡単なIOプログラムをいくつか作成していましたが、3番目のプログラムが問題を引き起こしています。Eclipse(CDTを使用)を使用して自分のマシンでプログラムを実行すると、Eclipseのコンソールはグリッチな出力を生成し、データの入力を求める代わりに、入力を取得して、FAILUREで一度に出力します。
プログラムは、ユーザーからファイル名を取得し、ファイルを作成し、ユーザーが空白行を入力するまでファイルに書き込むことになっています。
コンソール(g ++ files2.c)を介して自分のマシンでコンパイル/実行すると、データの入力を正しく求められますが、FAILUREが表示され、出力ファイルがありません。
scanfを使用してファイル名を取得すると機能ファイルが作成されますが(おそらく空白を無視するため)、whileループに入らないため、エラーはchar配列の使用方法にあると思います。
#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ループをどのように再構築する必要がありますか?