首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >练习5.C语言编程的第6章

练习5.C语言编程的第6章
EN

Stack Overflow用户
提问于 2016-01-12 07:05:27
回答 1查看 361关注 0票数 0

编写一个程序,作为一个简单的“打印”计算器。该程序应允许用户键入表单: number运算符的表达式。程序应识别下列运算符:+,-,*,/,S.E

  • S操作符告诉程序将“累加器”设置为键入的数字。
  • E操作符告诉程序执行到end.The,算术操作是在累加器的内容上执行的,该累加器的数字作为第二个操作数。

以下是显示程序应如何运行的“示例运行”:

开始计算10S设置累加器到10 = 10.000000累加器2/除以2= 5.000000内容累加器55 -减去55 -50.000000 100.25 S集累加器到100.25 = 100.250000 4*乘以4= 401.000000 0 E结束程序= 401.000000计算结束。

这是我的密码

代码语言:javascript
复制
#include <stdio.h>

int main(void)
{
char op;
float acc = 0, num;

printf("Begin Calculations\n");
while (op != 'E') {
    scanf("%f %c", &num, &op);
    switch (op) {
        case '+':
            acc += num;
            printf("= %f\n", acc);
            break;
        case '-':
            acc -= num;
            printf("= %f\n", acc);
            break;
        case '*':
            acc *= num;
            printf("= %f\n", acc);
            break;
        case '/':
            if (num == 0) {
                printf("Division by zero\n");
            }
            else {
                acc /= num;
                printf("= %f\n", acc);
            }
            break;
        case 'S':
            acc = num;
            printf("= %f\n", acc);
            break;
        case 'E':
            printf("= %f\n", acc);
            break;
        default:
            printf("Unknown operator\n");
            break;
    }
}
printf("End of Calculations");
}

我的代码可以很好地处理问题输入。但是,当我输入以下(和输出)时(输入与问题相同,但在“数字”和“运算符”之间没有空格):

代码语言:javascript
复制
Begin Calculations
    10S            
    = 10.000000    
    2/            
    = 5.000000      
    55-            
    -50.000000
    100.25S        
    = 100.250000
    4*            
    = 401.000000
    0E   

当我输入0E时,程序卡住了。我试图将scanf("%f %c", &num, &op);改为scanf("%f%c", &num, &op);,但它似乎解决不了我的问题。你能指出我代码中的问题吗?请给我一个详细的解释,因为我是相对较新的C。谢谢您能提供的任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-12 07:16:46

您正在读取浮点值。因此,如果scanf看到0E,它会等待更多的数字,因为它认为您输入的指数为0E5 (=0*10^5)。这就是为什么你的程序被困在这一点上。我建议用一个不同的字符结束,以避免这种含糊不清。

另一方面,如果扫描看到0,它将输出0.0作为浮动值,而'S‘作为字符,因为'S’永远不是浮点值的有效部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34737425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档