我的大学任务是编写一个小程序,用于计算二次方程,用户以这种格式输入:ax ^ 2 + bx + c = 0(例如3x ^ 2 + 2x-3 = 0)。我的程序必须扫描a,b和c并计算方程的根。我写这个来扫描系数:
scanf("%fx^2+%fx+%f=0", &a, &b, &c);
它对这样的方程式的工作:2x ^ 2 + 2x + 3 = 0。但是当我的方程中带有“ - ”(例如1x ^ 2 + 1x-2 = 0)时,扫描无法正常工作。它扫描1和1是真的,但不是-2而是扫描错误的真正大数字。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
我使用2个字符输入符号,然后从最后一个printf中删除它们 浮动a,b,c; char op1,op2;
scanf("%fx^2%c%fx%c%f=0", &a,&op1,&b,&op2, &c);
if(op1 == '-')
{
b *= -1;
// fix formating for last printf
op1 = '\b';
}
if(op2 == '-')
{
c *= -1;
// fix formating for last printf
op2 = '\b';
}
printf("a = %f\nb = %f\nc = %f\n",a,b,c);
// if op1 or op2 are '-' it won't be printed
printf("%fx^2%c%fx%c%f=0\n", a,op1,b,op2,c);
答案 1 :(得分:0)
让我们引用scanf()
关于%f
说明符的文档:
一系列十进制数字,可选地包含小数点,可选地前面带有符号(+或 - ),并且可选地后跟e或E字符和十进制整数(或strtod支持的一些其他序列)。
因此,说明符%f
负责符号,无需阅读。请尝试:
if(scanf("%fx^2%fx%f=0", &a,&b, &c)!=3){
fprintf(stderr," unable to read input\n");exit(1);
}
它不会解决以下情况: