- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个程序,该程序能够读取两个实数,后跟一个用户输入的字符。然后程序将根据字符评估这两个数字。该角色可以是我在下面列出的任何角色:
1. +(加法)
2. -(减法)
3. *(乘法)
4./(除法)
5. %(余数)
下面我贴出了我编写的代码,只是为了检查打印出来的值是否正确:
#include<stdio.h>
int main(){
float a,b,add,subtract,division,multiply,remainder;
char op;
printf("Enter two real numbers followed by one these characters:+, -, *, /, or % : ");
scanf("%f%f %c",&a,&b,&op);
printf("%.1f %c %.1f\n",a,op,b);
if (op=='+'){
add = a + b;
printf("%f",add);
}
else if (op=='-'){
subtract=a-b;
printf("%f",subtract);
}
else if (op=='/'){
division=a/b;
printf("%f",division);
}
else if (op=='*'){
multiply =a*b;
printf("%f",multiply);
}
else if (op=='%'){
remainder=a%b;
printf("%f",remainder);
}
else{
printf("invalid symbol");
}
return 0;
}
谁能告诉我为什么会出现运行时错误?
最佳答案
注意:OP 在回答初始问题后对其进行了显着更改,这是本文关注的重点,因此下面的答案现在看起来可能完全偏离目标。
If anyone can explain why I see different values that would be greatly appreciated.
您的代码存在多个问题。
float
类型,但它会将它们转换为 int
。您的scanf
应该使用"%f %f %c"
来获取实数 而不是整数 数; 2 2 +
,但是你的 scanf
显示 "%d%d % c"
(注意格式字符串中缺少的空格与输入中的额外空格)printf
函数调用需要将参数交换为 printf("%f %c %f",a, op, b);
(注意格式字符串使用 "%f"
和 op
和 b
变量的反转)第 1 点基于为用户打印的文本,请求“真实”数字。
第二点和第三点是罪魁祸首,因为当你在提示符下输入 2 2 +
时,你的变量看起来是 a = 2
, b = 2
,op = 43
,即'+'
字符的数值。
当您随后打印它时,您最终将 '+'
字符解释为一个整数,而您得到的是 43
。
程序的固定版本如下:
#include<stdio.h>
int main(){
float a, b, result;
char op;
printf("%s", "Enter two real numbers followed an operator (+, -, *, /, %): ");
scanf("%f %f %c", &a, &b, &op);
switch(op) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
/* make sure b != 0 */
result = a / b;
break;
case '%':
/* make sure b != 0 */
/* we type-cast to int because modulus is not defined for floats */
result = (float)((int)a % (int)b);
break;
default:
printf("%s\n", "Unknown operation");
break;
}
printf("%f %c %f = %f",a, op, b, result);
return 0;
}
它的用法和输出:
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 5 5 +
5.000000 + 5.000000 = 10.000000
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 5 5 *
5.000000 * 5.000000 = 25.000000%
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 5 5 /
5.000000 / 5.000000 = 1.000000%
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 10 5 %
10.000000 % 5.000000 = 0.000000%
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 5 10 %
5.000000 % 10.000000 = 5.000000%
➜ /tmp ./test
Enter two real numbers followed an operator (+, -, *, /, %): 8 5 -
8.000000 - 5.000000 = 3.000000
关于C++,构造读取两个实数和一个字符的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37516242/
我现在脑子里有这个迫切的问题:在现代 Fortran 中声明 double 实数的“可接受”方式是什么?从最旧到最新,故事似乎是这样的:DOUBLE PRECISION ,然后 REAL(kind=8
我编写了一个程序,允许将中缀表达式转换为后缀表达式,但它仅适用于一位数字[A-Z][a-z][0-9]。我怎样才能使实数(正数和负数)成为可能? Example: (50 + 3.75) + 50 -
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
使用 z3/python Web 界面,如果我问: x = Real ('x') solve(x * x == 2, show=True) 我很好地理解: Problem: [x·x = 2] Sol
我写了一个正则表达式来匹配任何数字: 正面和负面 十进制 实数 下面的正则表达式很好,但有一个缺点 ([\+\-]{1}){0,1}?[\d]*(\.{1})?[\\d]* 对于 + 或 - 等输入也
为什么当我在 SQL Server 中将 40.54 的值保存到 Real 类型的列时,它返回给我的值更像是 40.53999878999 而不是 40.54?我已经见过几次这种情况,但一直不明白为什
很震惊地学习这个,我肯定在犯错误...... 如果我 DECLARE 一个实数(或十进制)局部变量,我不能分配 (SET) 表达式的值?我必须先设置一个值,然后逐步执行表达式。如果我尝试一次“计算”所
我正在用 Python 为 Fortran 库编写前端。 Python 模块应该可以在 32 位和 64 位机器上运行;适用于 Windows、Linux 和 Mac。 我想了解一些数据类型的字节宽度
在 C++ 中,想要对较长的 (2^20) 实数 vector 进行排序,显然 sort() 可以解决问题。在我习惯了漂亮的 order() 函数之前使用过 R,该函数产生导致排序 vector 的排
给定一个真实值,我们能否检查 float 数据类型是否足以存储数字,或者是否需要 double? 我知道精度因架构而异。是否有任何 C/C++ 函数可以确定正确的数据类型? 最佳答案 有关背景,请参阅
我有一个 data.table , DT其中包含一列 C具有满足不等式的实值条目 0 (i-1)/N & x (i - 1)/10 & x (i - 1)/10 & x (i - 1)/10 &
需要帮助:如何使用 Excel 公式或 VBA 获取字符串中的十进制(实数)数字?我在“A 列”中有一个字符串,上面只有一个十进制数。我只想提取十进制(实数)数字,但它正在提取字符串上的第一个数字。详
我有一个维度为 (Nx, Ny, Nz) 的 3D 数组。 我想使用 FFTW3 库沿 z 轴应用真正的 FFT 和 IFFT。 这里,'z' 是变化最快的索引。 我已经使用 python 编写了相同
目前,我正在考虑拍摄图像及其光谱。现在 Parceval 的定理说两者应该具有相等的能量。然而,当我尝试在某些图像上对此进行测试时,numpy 真实 FFT 函数似乎并非如此。 这是我用于测试的代码:
用于将数值/实数/ double 转换为字符变化/文本。 select (12.0/100)::Double Precision;# 0.12 select (12.0/100)::Double Pr
我正在验证一个函数来计算我实验室中某个标准的通过率。这背后的数学原理非常简单:给定一些通过或失败的测试,通过的百分比是多少。 数据将作为一列值提供,即 P1 (第一次测试通过),F1 (第一次测试失败
我是一名优秀的程序员,十分优秀!