为什么这个循环在第一次转换后会产生错误?

时间:2015-11-07 16:37:35

标签: c if-statement while-loop

当我执行程序并输入C或F并完成该过程时, 这是我看到的形象:

Screen shot

我想隐藏红色矩形中的线条。这是我的代码:

#include <stdio.h>

int main(void){
    float f,c;
    char var;
    int x;

    while(var!='x'){
        printf("x=Ende c=Umrechnung c->f f=Umrechnung f->c:");
        scanf("%c",&var);
        if(var=='c'){
            printf("Grad Celsius =");
            scanf("%f",&c);
            f=(c*1.8)+32;
            printf("%.2f Grad Celsius sind %.2f Grad Fahrenheit\n",c,f);
        }
        else if(var=='f'){
            printf("Grad Fahrenheit =");
            scanf("%f",&f);
            c=(f-32)/1.8;
            printf("%.2f Grad Fahrenheit sind %.2f Grad Celsius\n",f,c);
        }
        else if(var=='x'){
            printf("fertig !! chao\n");
        }
        else {
            printf("Ungiltige Umreechnungsart!!\n");
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

在你的情况下发生这种情况是因为你使用scanf()和前一次调用scanf()时留下的换行符锁定给定角色。

如果您在scanf( %c,&var)格式化之前使用空格调用%c将解决问题,因为它将匹配任何大小的任何空格(包括无空格和前一个{{1}的空格} newline

的召唤

函数scanf()不提供缓冲区溢出保护,当您读取多个字符时尤其如此,例如scanf()并且可能变得不安全。

更好,更安全的方法是使用scanf("%s",&var)

fgets()

然后,您可以将输入格式化为您想要使用的任何内容,例如 fgets (value, MAX_VALUE_SIZE, stdin);