这是我正在使用C语言编写的程序的基本代码.我试图检测输出文件是否已经存在,如果它确实存在,我想询问用户是否要覆盖它.这就是我首先使用fopen(outfilename,“r”)打开outfilename文件的原因;而不是fopen(outfilename,“w”);.
@H_404_2@它检测文件不存在的情况,但是,如果它确实存在则执行printf(“输出文件已存在,覆盖(y / n):”);声明但完全忽略了scanf(“%c”,& yn);声明!
@H_404_2@如果文件不存在,程序末尾的printf读取“yn = 0”,如果存在,则读取“yn =”.有谁能够帮我?
#include <st@R_404_410@.h> #include <stdlib.h> #include <float.h> #include <string.h> int main(void) { FILE *inf; FILE *outf; char filename[21],outfilename[21]; char yn='0'; printf("Please enter an input filename: "); scanf("%s",&filename); printf("Please enter an output filename: "); scanf("%s",&outfilename); /* Open file for reading */ inf=fopen (filename,"r"); outf=fopen(outfilename,"r"); /*check that input file exists*/ if (inf!=NULL) { /*check that the output file doesn't already exist*/ if (outf==NULL){ fclose(outf); /*if it doesn't already exist create file by opening in "write" mode*/ outf=fopen(outfilename,"w"); } else { /*If the file does exist,give the option to overwrite or not*/ printf("Output file already exists,overwrite (y/n):"); scanf("%c",&yn); } } printf("\n yn=%c \n",yn); return 0; }
解决方法
printf("Please enter an output filename: "); scanf("%s",&outfilename);@H_404_2@当您输入第二个字符串并按ENTER键时,字符串和字符放在输入缓冲区中,它们是:输入的字符串和换行符.字符串被scanf消耗,但换行符仍然在输入中缓冲. @H_404_2@进一步,
scanf("%c",&yn);@H_404_2@用于读取字符的下一个scanf只读取/使用换行符,因此永远不会等待用户输入. @H_404_2@解决方案是使用以下内容消耗额外的换行符:
scanf(" %c",&yn); ^^^ <------------Note the space@H_404_2@或者使用getchar() @H_404_2@您可能需要查看我的答案here,以获得详细的问题解答.