user-0 提问: 求助！我想写一个既可以两个数字运算也可以三个数字运算的代码，写出来之后却不能运行。求大家帮忙指点一下！

回复:
user: user-1
content: 没太看懂，可以再看一下

user: user-0
content: 引用 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] 可以跑了！哈哈哈，谢谢！

user: user-0
content: 引用 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] 嗯嗯，谢谢了！多谢！

user: user-2
content: 引用 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]  我这里只测试过加法。没有测试其它算法。代码写的很有趣，从代码就能看出来你是一个很有想法的人。蛮不错的。加油！

user: user-0
content: 引用 12 楼 Chen_jiajie1234的回复:换个思路：一次只运算两个数，得出的结果保存在变量iSum里。下次输入另一个数和运算符号，跟iSum运算，得出的结果仍保存到iSum里。这样不就实现了三个数的预算了吗？ 我去试试。谢谢。

user: user-2
content: 引用 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这些函数的功能

user: user-0
content: 引用 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] 嗯嗯，好！谢谢了！

user: user-3
content: 换个思路：一次只运算两个数，得出的结果保存在变量iSum里。下次输入另一个数和运算符号，跟iSum运算，得出的结果仍保存到iSum里。这样不就实现了三个数的预算了吗？

user: user-2
content: 引用 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]  这个兄弟，很不好意思。今天有点不舒服。我明天一定给你想一想怎么能改一下。有点累，就不动脑子了

user: user-2
content: 我看了下，是scanf函数你的理解不足造成的。我运行了一下，三个相加的还是能跑的对吧。两个相加就GG了。我后头看看怎么改。你空了可以去学习一下scanf的返回值相关的知识。明天摸鱼的时候给你看看。

user: user-0
content: 引用 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

user: user-0
content: 引用 6 楼 千梦一生的回复:那你要把你的代码贴一下。我看看能否帮到什么 怎么搞啊。。。我不会。。。

user: user-0
content: 引用 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; }  供参考～ 谢谢，很有帮助！

user: user-2
content: 那你要把你的代码贴一下。我看看能否帮到什么

user: user-0
content: 引用 2 楼 千梦一生的回复:我有个想法。可以不用写的这么麻烦。比如循环呀。怎么样，你觉得？或者有这个需要一定得在此基础上修改吗？ 我正好在学循环，会考虑一下的！不过我现在想知道为啥这个代码运行不了。。。

user: user-0
content: 引用 1 楼 千梦一生的回复:贴代码。虽然有注释很棒，但格式看的有点晕 知道了，会改进的！谢谢！

user: user-4
content: 看着头大呢， /*************************************************************************     > 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; }  供参考～

user: user-2
content: 我有个想法。可以不用写的这么麻烦。比如循环呀。怎么样，你觉得？或者有这个需要一定得在此基础上修改吗？

user: user-2
content: 贴代码。虽然有注释很棒，但格式看的有点晕