このプログラムでは、端末またはユーザが指定した出力ファイル()に自分の名前を書き込むことになっています。私は端末に私の名前を書きたいときプログラムがコマンドラインで指定された名前を使用してファイルを作成していません
#include <stdio.h>
int main(int argc, char **argv)
{
// no output file print to screen, print name to terminal
if (argc < 2)
{
fprintf(stdout, "name\n");
}
//print name to output file given by user
else
{
int option;
int fFlag = 0;
while ((option = getopt(argc, argv, "f:")) != -1)
{
//if case 'f' print to output file
switch (option)
{
case 'f':
fFlag = 1; // flag indicates writing name to file
break;
//case f or error
case '?':
printf("error");
break;
}
}
//write to name to output file
if (fFlag)
{
FILE *file = fopen(argv[1], "w");
fprintf(file, "name");
}
}
return 0;
}
私のコードは動作しますが、私は、ユーザーが指定したファイルに自分の名前を書きたいときには動作しません。コードはコンパイルされ実行されますが、ファイルは存在しません。
コマンドラインのファイルが存在しない可能性があります。プログラムでファイルを作成するはずですか?
私は間違っていることを理解しています。みんなありがとう!
書き込みアクセスのために開こうとしているファイル名が 'argv [1]'に入っていることを確認しましたか?(b) 'file'が書き込みを試みる前にNULLでないことを確認し、 (c)両方のファイルが展開されていると仮定して、あなたのプログラムが実行されている現在の作業ディレクトリ*があなたが作成しようとしたファイルを確立していることを確認してください。今のところ、(a)と(b)は潜在的な候補者に見えますが、後者は[スペンサーの第六戒則](http://www.seebs.net/c/10com.html)に違反する主要な例です – WhozCraig
再フォーマットされたコードでは、 'fprintf(file、" name ");'は 'argc <2'の場合のみです。 – chux
前のコメントに加えて、書いた後にfclose(ファイル)を忘れたと思います。 –