它检测文件不存在的情况,但是,如果它确实存在则执行printf(“输出文件已存在,覆盖(y / n):”);声明但完全忽略了scanf(“%c”,& yn);声明!
如果文件不存在,程序末尾的printf读取“yn = 0”,如果存在,则读取“yn =”.有谁能够帮我?
#include <stdio.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);
当您输入第二个字符串并按ENTER键时,字符串和字符放在输入缓冲区中,它们是:输入的字符串和换行符.字符串被scanf消耗,但换行符仍然在输入中缓冲.
进一步,
scanf("%c",&yn);
用于读取字符的下一个scanf只读取/使用换行符,因此永远不会等待用户输入.
解决方案是使用以下内容消耗额外的换行符:
scanf(" %c",&yn); ^^^ <------------Note the space
或者使用getchar()
您可能需要查看我的答案here,以获得详细的问题解答.
总结以上是内存溢出为你收集整理的程序不等待用户输入scanf(“%c”,&yn);全部内容,希望文章能够帮你解决程序不等待用户输入scanf(“%c”,&yn);所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)