首页 > 解决方案 > C 中的问题 - scanf() 跳过输入(缓冲区没有问题)

问题描述

基本上,我必须使用菜单(我在第一年)进行货币价格转换,但是当您选择 0 时执行的第二个 scanf 被完全跳过;之后程序再次打印菜单大约 5 次,然后它让您再次选择一个选项。这是唯一不工作的部分,其余的都很好。

您可能认为问题在于缓冲区存储了前一个 scanf 中的换行符,但事实并非如此,因为我要确保清理它。另外,不要介意字符串,它们只是西班牙语。

谢谢你的时间!

'''

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(void) {

    char e = ' ';
    float le = 1.1, de = 0.9, din = 1, c1, c2;

    while (e != 's') {

        puts("\n                ================================================================");
        puts("                                      CONVERSION DE DIVISAS");
        puts("                ================================================================");

        puts("0) Introducir valores de cotizacion de monedas");
        puts("a) Convertir euros a dolares y libras");
        puts("b) Convertir dolares a euros y libras");
        puts("c) Convertir libras a euros y dolares");
        puts("s) Salir");

        printf("\nIntroduzca su eleccion: ");
        scanf(" %c", &e);
        e = tolower(e);

        fflush(stdin);

        switch (e) {

            case '0':
                printf("\nIntroduzca cuantas libras son un euro: ");
                scanf(" %9.4f ", &le);
                fflush(stdin);
                printf("Introduzca cuantos dolares son un euro: ");
                scanf(" %9.4f ", &de);
                fflush(stdin);
                break;
            default:
                printf("\nOpcion incorrecta");
                break;
        }
    }
    return 0;
}

'''

标签: cscanfbuffer

解决方案


推荐阅读