-1

在检查变量是否为空或为空的行上,我不断收到非法使用字符。

有谁知道为什么会这样?

错误点在这里:

if((fa == "" && fp == "") || (fb == "" && fp == "")){

虽然它在我只是不知道是什么导致这个错误之前有效。

编辑:

现在更改了代码,错误是函数 sinfa 的参数太少。

我只想一次将一个参数传递给这个函数,是否有可能或者我必须创建另一个函数来做到这一点,以便我可以单独满足它们?

谢谢你。:)

#include<stdio.h>

#include<conio.h>
#include<math.h>
#define PI 3.14159265359

float sinfa(float num1,float num2)
{
    float fc;
    float powers;
    float rad_angle;

    if(num1 != 0){
    rad_angle = num1 * (PI / 180.0);
    powers = pow(rad_angle,4);
    fc = sin(rad_angle)-powers+1;
    }else{
    rad_angle = num2 * (PI / 180.0);
    powers = pow(rad_angle,4);
    fc = sin(rad_angle)-powers+1;
    }
    return (fc);
}

float sinp(float p1)
{
    float fop;
    float ppowers;
    printf("%f",p1);
    ppowers = pow(p1,4);
    fop = sin(p1)-ppowers+1;
    return (fop);
}

float tp(float fa,float fb,int num1,int num2)
{
    float p;
    float fm2 = fa*num2;
    float fm1 = fb*num1;
    p = fm2-fm1/fa-fb;
    return (p);
}

float main()
{
    float num1;
    float num2;
    float fa;
    float fb;
    float p1;
    float fp;

    clrscr();
    printf("Enter number 1: \n");
    scanf("%f", &num1);
    getch();
    printf("Enter number 2: \n");
    scanf("%f", &num2);
    getch();
    clrscr();

    if((fa == 0 && fp == 0) || (fb == 0 && fp == 0)){
        fa = sinfa(num1);
        fb = sinfa(num2);
        p1 = tp(fa,fb,num1,num2);
        fp = sinp(p1);
    }else{
        if((fa*fp) < 0){
            num1 = num1;
            num2 = p1;
            fa = sinfa(num1);
            fb = sinfa(num2);
            p1 = tp(fa,fb,num1,num2);
            fp = sinp(p1);
        }
        if((fb*fp)< 0){
            printf("\n 2");
            getch();
        }
    }
}
4

4 回答 4

2

""不是一个数字。您无法将数字与它进行比较。

于 2013-01-30T00:38:59.973 回答
2

出现错误是因为您尝试将文字字符串与浮点值进行比较。

您对空字符串的测试也是错误的。要检查字符串是否为空或空,您应该使用以下代码(假设类型为fpis char *):

if(fp == NULL || *fp == '\0')

sinfa函数没有有效的原型。在函数定义中的参数中添加类型说明符num1num2

根据标准,main函数的原型应该是

int main(void)

或者

int main(int argc, char *argv[])

你的错了。

我想您正在尝试检查scanf输入转换期间是否有错误。为此,您应该scanf使用函数检查结果并检查 gloval 错误状态ferror(或errno直接检查值)。

于 2013-01-30T00:40:11.223 回答
1

出现错误是因为您将浮点数与字符串文字进行比较,即:

if((fa == "")

您只能将浮点数与数字/浮点文字进行比较,即:

if((fa == 0.0

回想一下,对于浮点等原始类型,没有诸如 NULL / uninitialized 之类的概念。相反,它们通常默认为 0。

因此具有以下意味着 f 值将是文字 0

float f;
于 2013-01-30T00:46:12.530 回答
0
float fa;
float fb;
float p1;
float fp;

clrscr();
printf("Enter number 1: \n");
scanf("%f", &num1);
getch();
printf("Enter number 2: \n");
scanf("%f", &num2);
getch();
clrscr();


if((fa == 0 && fp == 0) || (fb == 0 && fp == 0)){

您在哪里为 fa、fb 或 fp 赋值?无处。这是未定义的行为。

于 2013-01-30T01:24:57.750 回答