Program no espera la entrada del usuario con scanf ("% c", & yn);

Este es el código básico de un programa que estoy escribiendo para practicar el uso de archivos en C. Estoy tratando de detectar si el archivo de salida ya existe y, si existe, quiero preguntarle al usuario si desea sobrescribirlo o no. . Esta es la razón por la que primero abrí el archivo outfilename con fopen (outfilename, "r"); en lugar de fopen (outfilename, "w");.

Detecta el caso del archivo no existente, sin embargo, si existe, ejecuta printf ("El archivo de salida ya existe, sobrescribe (y / n):"); pero ignora por completo el scanf ("% c", & yn); ¡declaración

El printf al final del programa lee "yn = 0" si el archivo no existe y solo "yn =" si existe. ¿Alguien puede ayudarme

#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;
}

Respuestas a la pregunta(10)

Su respuesta a la pregunta