我正在编写一个程序,要求用户输入 2 个输入:x 和 y。这些值用于计算此公式:(3x^2-2xy+5)/(y^2+1)。当我输入值时 --> 2,3 它计算出一个非常小的负数,例如 -12586511
#include <stdio.h>
int main (void) {
int x, y;
printf("Enter two integer values (x, y): ");
scanf("%d,%d", &x, &y);
float E = (3 * (x*x) - 2 * (x*y) + 5) / (y*y+1);
printf("The expression value is: %.2f\n", E);
return 0;
}
最佳答案
-12586511
肯定是输入无效数据的结果。
对于像 "2 3"
或 "2 ,3"
或 "2 , 3"
这样的输入,y
不会被设置。
// Risky code
scanf("%d,%d", &x, &y);
健壮的代码会检查 scanf()
的结果以确保输入正确。
if (scanf("%d,%d", &x, &y) != 2) {
puts("Error");
return -1;
}
最好大方点,在数字后留空格:
// v
if (scanf("%d ,%d", &x, &y) != 2) {
第二期涉及使用 int
数学进行除法。 OP 可能希望方程式使用 FP 数学。
// float E = (3 * (x*x) - 2 * (x*y) + 5) / (y*y+1);
float E = (3 * (x*x) - 2 * (x*y) + 5) / (y*y+1.0f);
// or
float E = (3.0f * (x*x) - 2 * (x*y) + 5) / (y*y+1.0f);
关于c - 根据用户输入求解表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39758999/