ceg*_*n55 2 c logic expression
我正在编写一个程序,要求用户输入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;
}
Run Code Online (Sandbox Code Playgroud)
-12586511 肯定是无效数据输入的结果.
输入像"2 3"或"2 ,3"或"2 , 3",y将不会被设置.
// Risky code
scanf("%d,%d", &x, &y);
Run Code Online (Sandbox Code Playgroud)
强大的代码检查结果scanf()以确保正确的输入.
if (scanf("%d,%d", &x, &y) != 2) {
puts("Error");
return -1;
}
Run Code Online (Sandbox Code Playgroud)
最好是慷慨,并在数字后允许空格:
// v
if (scanf("%d ,%d", &x, &y) != 2) {
Run Code Online (Sandbox Code Playgroud)
第二个问题涉及使用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);
Run Code Online (Sandbox Code Playgroud)