程序不等待用户输入scanf(“%c”,&yn);

这是我正在使用C语言编写的程序的基本代码.我试图检测输出文件是否已经存在,如果它确实存在,我想询问用户是否要覆盖它.这就是我首先使用fopen(outfilename,“r”)打开outfilename文件的原因;而不是fopen(outfilename,“w”);.

检测文件不存在的情况,但是,如果它确实存在则执行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,以获得详细的问题解答.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...