以下の問題の主な説明です。私はOUTFは、既存のファイルへのファイルポインタであるファイルポインタを理解するのに苦労していますか?
if (outf!=NULL){
printf("Output file already exists, overwrite (y/n):");
scanf("%c",yn);
}
を求めた後、エラーメッセージを取得する理由はなく、単に、私が把握することはできません。コードの途中で説明を読んでください。
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <string.h>
int main() {
/* Declare file pointer */
FILE *inf;
FILE *outf;
int linenumber,linecounter=0,linepresent;
char filename[21];
char detail[21];
char linedetail[21];
char outfilename[21];
char letter,yn='y';
int position;
/*INPUT DETAILS Ask user for file name and line number*/
printf("Please enter an input filename and a linenumber: ");
//scan filename to char string and line number to int variable
scanf("%s %i",&filename,&linenumber);
/*OUTPUT DETAILS Ask user for file name, letter & position, etc*/
printf("Please enter an output filename, a letter and a position:");
scanf("%s %c %i",&outfilename,&letter,&position);
/* Open file for reading */
inf=fopen (filename,"r");
outf=fopen(outfilename,"r");
/*check that file exists*/
if (inf!=NULL) {
これまですべて正常に動作します。 次に、outfファイルがすでに存在するかどうかを調べます。 outfが既存のファイルを指している場合、「出力ファイルはすでに存在し、上書きされています(y/n):」というメッセージが表示されます。
ただし、これを印刷するとエラーウィンドウが開きます!これはおそらく非常に新人のミスです - 私はまだCを学んでいます。そのようなファイルがない場合、プログラムは正常に完了し、if文をバイパスします。
if (outf!=NULL){
printf("Output file already exists, overwrite (y/n):");
scanf("%c",yn);
}
if (yn=='y'){
/*keep reading to end of file*/
while (feof(inf)==0) {
linecounter++;
/*read each line and store the line number in detail[WORDS GO HERE]*/
fscanf (inf,"%s", &detail);
/*If we reach the line selected by the user*/
if (linecounter==linenumber){
strcpy(linedetail,detail);
linepresent=1;
}
}
if (linepresent==0) {
printf("File only contains %i lines",linecounter);
}
} else {
exit(1);
}
} else {
printf("Input file not found");
}
printf("%s",linedetail);
/* close the file */
fclose(inf);
fclose(outf);
return (0);
}
'&': 'scanf("%c "、&yn)' – pmg
あなたが怒っている行を見つけたら、なぜ単純に 'int main ){char yn = 'y'; scanf( "%c"、yn); 0を返します。 } '...そして、それがちょうどそれを墜落させたとき? : -/*(次回は、質問を最小限のケースに減らして、他のすべてのものを取り除いたときにエラーを発生させるときには最善の方法です。)* – HostileFork
ありがとう、私は質問のテクニックを洗練する必要があります! everyonesの忍耐のための歓声! – user1083734