求助!我想写一个既可以两个数字运算也可以三个数字运算的代码,写出来之后却不能运行。求大家帮忙指点一下!

没糖de药房 2020-03-18 08:01:20
在线等!谢谢!
...全文
1154 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_41003789 2020-03-21
  • 打赏
  • 举报
回复
没太看懂,可以再看一下
没糖de药房 2020-03-21
  • 打赏
  • 举报
回复
引用 18 楼 千梦一生的回复:
[quote=引用 17 楼 千梦一生 的回复:]
[quote=引用 16 楼 qq_46499695 的回复:]
[quote=引用 12 楼 Chen_jiajie1234的回复:]换个思路:一次只运算两个数,得出的结果保存在变量iSum里。下次输入另一个数和运算符号,跟iSum运算,得出的结果仍保存到iSum里。这样不就实现了三个数的预算了吗?

我去试试。谢谢。[/quote]


#include<stdio.h>
int main() {
float a, b, c;
int leap;
char m, n;
printf("please:");
scanf("%f%c%f", &a, &m, &b);//输入表达式
n = getchar();
if(n == '\n')
leap = 3;
else
{
leap = 5;
scanf("%f", &c);
}
switch (leap)//判断是两个数字计算
{
case 3:
switch (m)
{
case '+':printf("%f", a + b);//加法
break;
case '-':printf("%f", a - b);//减法
break;
case '*':printf("%f", a*b);//乘法
break;
case '/':printf("%f", a / b);//除法
break;
default:printf("error");
}
break;
case 5:
switch (m)//三个数运算
{
case '+':
switch (n)//加法
{
case '+':printf("%f", a + b + c);//加法
break;
case '-':printf("%f", a + b - c);//减法
break;
default:printf("error");
}
break;
case '-':
switch (n)//减法
{
case '+':
printf("%f", a - b + c);//加法
break;
case '-':
printf("%f", a - b - c);//减法
break;
default:
printf("error");
}
break;
}
}
}


这样搞就能运行起来就能感觉稍微人性化了一点。
那个你需要的是搞明白
scanf和getchar这些函数的功能[/quote]

我这里只测试过加法。没有测试其它算法。代码写的很有趣,从代码就能看出来你是一个很有想法的人。蛮不错的。加油![/quote] 可以跑了!哈哈哈,谢谢!
没糖de药房 2020-03-21
  • 打赏
  • 举报
回复
引用 18 楼 千梦一生的回复:
[quote=引用 17 楼 千梦一生 的回复:]
[quote=引用 16 楼 qq_46499695 的回复:]
[quote=引用 12 楼 Chen_jiajie1234的回复:]换个思路:一次只运算两个数,得出的结果保存在变量iSum里。下次输入另一个数和运算符号,跟iSum运算,得出的结果仍保存到iSum里。这样不就实现了三个数的预算了吗?

我去试试。谢谢。[/quote]


#include<stdio.h>
int main() {
float a, b, c;
int leap;
char m, n;
printf("please:");
scanf("%f%c%f", &a, &m, &b);//输入表达式
n = getchar();
if(n == '\n')
leap = 3;
else
{
leap = 5;
scanf("%f", &c);
}
switch (leap)//判断是两个数字计算
{
case 3:
switch (m)
{
case '+':printf("%f", a + b);//加法
break;
case '-':printf("%f", a - b);//减法
break;
case '*':printf("%f", a*b);//乘法
break;
case '/':printf("%f", a / b);//除法
break;
default:printf("error");
}
break;
case 5:
switch (m)//三个数运算
{
case '+':
switch (n)//加法
{
case '+':printf("%f", a + b + c);//加法
break;
case '-':printf("%f", a + b - c);//减法
break;
default:printf("error");
}
break;
case '-':
switch (n)//减法
{
case '+':
printf("%f", a - b + c);//加法
break;
case '-':
printf("%f", a - b - c);//减法
break;
default:
printf("error");
}
break;
}
}
}


这样搞就能运行起来就能感觉稍微人性化了一点。
那个你需要的是搞明白
scanf和getchar这些函数的功能[/quote]

我这里只测试过加法。没有测试其它算法。代码写的很有趣,从代码就能看出来你是一个很有想法的人。蛮不错的。加油![/quote] 嗯嗯,谢谢了!多谢!
千梦一生 2020-03-20
  • 打赏
  • 举报
回复
引用 17 楼 千梦一生 的回复:
[quote=引用 16 楼 qq_46499695 的回复:]
[quote=引用 12 楼 Chen_jiajie1234的回复:]换个思路:一次只运算两个数,得出的结果保存在变量iSum里。下次输入另一个数和运算符号,跟iSum运算,得出的结果仍保存到iSum里。这样不就实现了三个数的预算了吗?

我去试试。谢谢。[/quote]


#include<stdio.h>
int main() {
float a, b, c;
int leap;
char m, n;
printf("please:");
scanf("%f%c%f", &a, &m, &b);//输入表达式
n = getchar();
if(n == '\n')
leap = 3;
else
{
leap = 5;
scanf("%f", &c);
}
switch (leap)//判断是两个数字计算
{
case 3:
switch (m)
{
case '+':printf("%f", a + b);//加法
break;
case '-':printf("%f", a - b);//减法
break;
case '*':printf("%f", a*b);//乘法
break;
case '/':printf("%f", a / b);//除法
break;
default:printf("error");
}
break;
case 5:
switch (m)//三个数运算
{
case '+':
switch (n)//加法
{
case '+':printf("%f", a + b + c);//加法
break;
case '-':printf("%f", a + b - c);//减法
break;
default:printf("error");
}
break;
case '-':
switch (n)//减法
{
case '+':
printf("%f", a - b + c);//加法
break;
case '-':
printf("%f", a - b - c);//减法
break;
default:
printf("error");
}
break;
}
}
}


这样搞就能运行起来就能感觉稍微人性化了一点。
那个你需要的是搞明白
scanf和getchar这些函数的功能[/quote]

我这里只测试过加法。没有测试其它算法。代码写的很有趣,从代码就能看出来你是一个很有想法的人。蛮不错的。加油!
没糖de药房 2020-03-20
  • 打赏
  • 举报
回复
引用 12 楼 Chen_jiajie1234的回复:
换个思路:一次只运算两个数,得出的结果保存在变量iSum里。下次输入另一个数和运算符号,跟iSum运算,得出的结果仍保存到iSum里。这样不就实现了三个数的预算了吗?
我去试试。谢谢。
千梦一生 2020-03-20
  • 打赏
  • 举报
回复
引用 16 楼 qq_46499695 的回复:
[quote=引用 12 楼 Chen_jiajie1234的回复:]换个思路:一次只运算两个数,得出的结果保存在变量iSum里。下次输入另一个数和运算符号,跟iSum运算,得出的结果仍保存到iSum里。这样不就实现了三个数的预算了吗?

我去试试。谢谢。[/quote]


#include<stdio.h>
int main() {
float a, b, c;
int leap;
char m, n;
printf("please:");
scanf("%f%c%f", &a, &m, &b);//输入表达式
n = getchar();
if(n == '\n')
leap = 3;
else
{
leap = 5;
scanf("%f", &c);
}
switch (leap)//判断是两个数字计算
{
case 3:
switch (m)
{
case '+':printf("%f", a + b);//加法
break;
case '-':printf("%f", a - b);//减法
break;
case '*':printf("%f", a*b);//乘法
break;
case '/':printf("%f", a / b);//除法
break;
default:printf("error");
}
break;
case 5:
switch (m)//三个数运算
{
case '+':
switch (n)//加法
{
case '+':printf("%f", a + b + c);//加法
break;
case '-':printf("%f", a + b - c);//减法
break;
default:printf("error");
}
break;
case '-':
switch (n)//减法
{
case '+':
printf("%f", a - b + c);//加法
break;
case '-':
printf("%f", a - b - c);//减法
break;
default:
printf("error");
}
break;
}
}
}


这样搞就能运行起来就能感觉稍微人性化了一点。
那个你需要的是搞明白
scanf和getchar这些函数的功能
没糖de药房 2020-03-20
  • 打赏
  • 举报
回复
引用 11 楼 千梦一生的回复:
[quote=引用 9 楼 qq_46499695 的回复:]
[quote=引用 6 楼 千梦一生的回复:]那你要把你的代码贴一下。我看看能否帮到什么

nclude<stdio.h>int main(){ float a , b , c ; int leap ; char m , n ; printf("please:"); leap=scanf("%f%c%f%c%f",&a,&m,&b,&n,&c);//输入表达式 switch(leap)//判断是两个数字计算 { case 3:switch(m) { case '+':printf("%f",a+b);//加法 break; case '-':printf("%f",a-b);//减法 break; case '*':printf("%f",a*b);//乘法 break; case '/':printf("%f",a/b);//除法 break; default:printf("error"); }break; case 5:switch(m)//三个数运算 { case '+':switch(n)//加法 { case '+':printf("%f",a+b+c);//加法 break; case '-':printf("%f",a+b-c);//减法 break; default:printf("error"); }break; case '-':switch(n)//减法 { case '+':printf("%f",a-b+c);//加法 break; case '-':printf("%f",a-b-c);//减法 break; default:printf("erro[/quote]

这个兄弟,很不好意思。今天有点不舒服。我明天一定给你想一想怎么能改一下。有点累,就不动脑子了[/quote] 嗯嗯,好!谢谢了!
Chen_jiajie1234 2020-03-19
  • 打赏
  • 举报
回复
换个思路:一次只运算两个数,得出的结果保存在变量iSum里。下次输入另一个数和运算符号,跟iSum运算,得出的结果仍保存到iSum里。这样不就实现了三个数的预算了吗?
千梦一生 2020-03-19
  • 打赏
  • 举报
回复
引用 9 楼 qq_46499695 的回复:
[quote=引用 6 楼 千梦一生的回复:]那你要把你的代码贴一下。我看看能否帮到什么

nclude<stdio.h>int main(){ float a , b , c ; int leap ; char m , n ; printf("please:"); leap=scanf("%f%c%f%c%f",&a,&m,&b,&n,&c);//输入表达式 switch(leap)//判断是两个数字计算 { case 3:switch(m) { case '+':printf("%f",a+b);//加法 break; case '-':printf("%f",a-b);//减法 break; case '*':printf("%f",a*b);//乘法 break; case '/':printf("%f",a/b);//除法 break; default:printf("error"); }break; case 5:switch(m)//三个数运算 { case '+':switch(n)//加法 { case '+':printf("%f",a+b+c);//加法 break; case '-':printf("%f",a+b-c);//减法 break; default:printf("error"); }break; case '-':switch(n)//减法 { case '+':printf("%f",a-b+c);//加法 break; case '-':printf("%f",a-b-c);//减法 break; default:printf("erro[/quote]

这个兄弟,很不好意思。今天有点不舒服。我明天一定给你想一想怎么能改一下。有点累,就不动脑子了
千梦一生 2020-03-18
  • 打赏
  • 举报
回复
我看了下,是scanf函数你的理解不足造成的。我运行了一下,三个相加的还是能跑的对吧。两个相加就GG了。我后头看看怎么改。你空了可以去学习一下scanf的返回值相关的知识。明天摸鱼的时候给你看看。
没糖de药房 2020-03-18
  • 打赏
  • 举报
回复
引用 6 楼 千梦一生的回复:
那你要把你的代码贴一下。我看看能否帮到什么
nclude<stdio.h>int main(){ float a , b , c ; int leap ; char m , n ; printf("please:"); leap=scanf("%f%c%f%c%f",&a,&m,&b,&n,&c);//输入表达式 switch(leap)//判断是两个数字计算 { case 3:switch(m) { case '+':printf("%f",a+b);//加法 break; case '-':printf("%f",a-b);//减法 break; case '*':printf("%f",a*b);//乘法 break; case '/':printf("%f",a/b);//除法 break; default:printf("error"); }break; case 5:switch(m)//三个数运算 { case '+':switch(n)//加法 { case '+':printf("%f",a+b+c);//加法 break; case '-':printf("%f",a+b-c);//减法 break; default:printf("error"); }break; case '-':switch(n)//减法 { case '+':printf("%f",a-b+c);//加法 break; case '-':printf("%f",a-b-c);//减法 break; default:printf("erro
没糖de药房 2020-03-18
  • 打赏
  • 举报
回复
引用 6 楼 千梦一生的回复:
那你要把你的代码贴一下。我看看能否帮到什么
怎么搞啊。。。我不会。。。
没糖de药房 2020-03-18
  • 打赏
  • 举报
回复
引用 3 楼 自信男孩的回复:
看着头大呢,
/*************************************************************************
> File Name: abb.cpp
> Author: cfjtaishan
> Mail: cfj20080302@163.com
> Created Time: 2020年03月18日 星期三 20时29分46秒
************************************************************************/

#include <stdio.h>
#include <math.h>

float get_result(float a, char opt, float b);

int main(void)
{
char opt1, opt2;
float a, b, c, result;
int choice;

printf("Please input your choice: (1: two number opt, 2: three nubers opt)");
scanf("%d", &choice);

if (choice != 1 && choice != 2) {
printf("Input error!\n");
return -1;
}

if (choice == 1) {
printf("Please input your operation: (eg: 1*2)");
scanf("%f%c%f", &a, &opt1, &b);
printf("=%.2f\n", get_result(a, opt1, b));
return 0;
}
printf("Please input your operation: (eg: 1*2*3)");
scanf("%f%c%f%c%f", &a, &opt1, &b, &opt2, &c);
if (opt1 == '*' || opt1 == '/') {
result = get_result(a, opt1, b);
printf("=%.2f\n", get_result(result, opt2, c));
} else if (opt2 == '*' || opt2 == '/') {
result = get_result(b, opt2, c);
printf("=%.2f\n", get_result(a, opt1, result));
}

return 0;
}


float get_result(float a, char opt, float b)
{
float result;

switch (opt) {
case '+':
result = a+b;
break;

case '-':
result = a-b;
break;

case '*':
result = a*b;
break;

case '/':
if (fabsf(b) > 1e-6)
result = a/b;
break;
}

return result;
}

供参考~
谢谢,很有帮助!
千梦一生 2020-03-18
  • 打赏
  • 举报
回复
那你要把你的代码贴一下。我看看能否帮到什么
没糖de药房 2020-03-18
  • 打赏
  • 举报
回复
引用 2 楼 千梦一生的回复:
我有个想法。可以不用写的这么麻烦。比如循环呀。怎么样,你觉得?或者有这个需要一定得在此基础上修改吗?
我正好在学循环,会考虑一下的!不过我现在想知道为啥这个代码运行不了。。。
没糖de药房 2020-03-18
  • 打赏
  • 举报
回复
引用 1 楼 千梦一生的回复:
贴代码。虽然有注释很棒,但格式看的有点晕
知道了,会改进的!谢谢!
自信男孩 2020-03-18
  • 打赏
  • 举报
回复
看着头大呢,
/*************************************************************************
> File Name: abb.cpp
> Author: cfjtaishan
> Mail: cfj20080302@163.com
> Created Time: 2020年03月18日 星期三 20时29分46秒
************************************************************************/

#include <stdio.h>
#include <math.h>

float get_result(float a, char opt, float b);

int main(void)
{
char opt1, opt2;
float a, b, c, result;
int choice;

printf("Please input your choice: (1: two number opt, 2: three nubers opt)");
scanf("%d", &choice);

if (choice != 1 && choice != 2) {
printf("Input error!\n");
return -1;
}

if (choice == 1) {
printf("Please input your operation: (eg: 1*2)");
scanf("%f%c%f", &a, &opt1, &b);
printf("=%.2f\n", get_result(a, opt1, b));
return 0;
}
printf("Please input your operation: (eg: 1*2*3)");
scanf("%f%c%f%c%f", &a, &opt1, &b, &opt2, &c);
if (opt1 == '*' || opt1 == '/') {
result = get_result(a, opt1, b);
printf("=%.2f\n", get_result(result, opt2, c));
} else if (opt2 == '*' || opt2 == '/') {
result = get_result(b, opt2, c);
printf("=%.2f\n", get_result(a, opt1, result));
}

return 0;
}


float get_result(float a, char opt, float b)
{
float result;

switch (opt) {
case '+':
result = a+b;
break;

case '-':
result = a-b;
break;

case '*':
result = a*b;
break;

case '/':
if (fabsf(b) > 1e-6)
result = a/b;
break;
}

return result;
}

供参考~
千梦一生 2020-03-18
  • 打赏
  • 举报
回复
我有个想法。可以不用写的这么麻烦。比如循环呀。怎么样,你觉得?或者有这个需要一定得在此基础上修改吗?
千梦一生 2020-03-18
  • 打赏
  • 举报
回复
贴代码。虽然有注释很棒,但格式看的有点晕

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧