gpt4 book ai didi

c - 程序不会等待用户输入 scanf ("%c",&yn);

转载 作者:太空狗 更新时间:2023-10-29 17:14:37 24 4
gpt4 key购买 nike

这是我正在编写的程序的基本代码,用于练习在 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 以获得问题的详 segmentation 步说明。

关于c - 程序不会等待用户输入 scanf ("%c",&yn);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com