根据用户输入求解表达式

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)

chu*_*ica 5

-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)