我要写的这个计算器有几个问题。不能100%确定这是格式化还是其他格式。第一个问题是,在使用+和-,C(表示清除)和T(将累加器设置为以下数字)后,它将不会打印结果。在*和/上工作正常。 另一个问题是将所有输入保存到的数组打印。 对于某些输入来说,它工作得很好,但是格式却很奇怪。有些字符不会显示,而某些浮动则是错误的,而另一些则是正确的。我希望有人能为我清除它。
我尝试进行一些小的调整,但这已经达到我的目标。
int main(){
float tall[STRLEN], input,
akkumulator = 0.0;
char tegn[STRLEN], operator;
int i = 0;
printf("Kalkulator\n");
printf("= %f", akkumulator);
do{
i += 1;
printf("\n: ");
scanf("%c", &operator); char check = toupper(operator);
scanf("%f", &input);
switch (check){
case '*':
akkumulator *= input;
tegn[i] = '*';
tall[i] = input;
printf("\n= %f", akkumulator);
break;
case '+':
akkumulator += input;
tegn[i] = '+';
tall[i] = input;
printf("\n= %f", akkumulator);
break;
case '-':
akkumulator -= input;
tegn[i] = '-';
tall[i] = input;
printf("\n= %f", akkumulator);
break;
case '/':
akkumulator /= input;
tegn[i] = '/';
tall[i] = input;
printf("\n= %f", akkumulator);
break;
case 'C':
akkumulator = 0.0;
tegn[i] = 'C';
tall[i] = input;
printf("\n= %f", akkumulator);
break;
case 'T':
akkumulator = input;
tegn[i] = 'T';
tall[i] = input;
printf("\n= %f", akkumulator);
break;
default:
break;
}
if(tegn[i] == '/' && tall == 0)
printf("\n You can not do that");
else if(operator == 'S')
for(int y = 0; y<i; y++){
printf("\n%2c %5f", tegn[y], tall[y]);
}
}while(operator != 'S');
return 0;
}
答案 0 :(得分:0)
在开始之前,在这种情况下,for
循环比do while()
循环有用得多。对于零除,您已经有case '/':
,因此,最好将printf("\n You can not do that");
放在switch
中。
scanf()
,这意味着您需要像这样输入C
13.45
继续循环。而且,即使您输入了两个输入
C
45.23
,由于您的输入缓冲区,下一个用于运算符的scanf将获得\n
。在getchar()
之后添加scanf("%f", &input);
将解决此问题。
最后,您的do while()
循环的终止条件为operator != 'S'
,但operator
仍为's'
,因为大写字母的变化是check
,而不是operator
。这就是即使您输入s计算器也不会结束的原因。
for(int y = 0; y<i; y++){
printf("\n%2c %5f", tegn[y], tall[y]);
}
进入
for(int y = 1; y <= i; y++){
printf("\n%2c %5f", tegn[y], tall[y]);
}
将解决您的问题