当我执行程序并输入C或F并完成该过程时, 这是我看到的形象:
我想隐藏红色矩形中的线条。这是我的代码:
#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;
}
答案 0 :(得分:1)
在你的情况下发生这种情况是因为你使用scanf()
和前一次调用scanf()
时留下的换行符锁定给定角色。
如果您在scanf( %c,&var)
格式化之前使用空格调用%c
将解决问题,因为它将匹配任何大小的任何空格(包括无空格和前一个{{1}的空格} newline
。
函数scanf()
不提供缓冲区溢出保护,当您读取多个字符时尤其如此,例如scanf()
并且可能变得不安全。
更好,更安全的方法是使用scanf("%s",&var)
:
fgets()
然后,您可以将输入格式化为您想要使用的任何内容,例如 fgets (value, MAX_VALUE_SIZE, stdin);