在C中非法使用浮点

时间:2013-01-30 00:35:43

标签: c floating-point floating-point-conversion

我一直在线路上非法使用字符来检查变量是空还是空。

有谁知道为什么会这样?

错误点在这里:

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 个答案:

答案 0 :(得分:2)

""不是数字。你无法将数字与它进行比较。

答案 1 :(得分:2)

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

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

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

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

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

int main(void)

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

你错了。

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

答案 2 :(得分:2)

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

if((fa == "")

您只能将float与numeric / float文字进行比较,即:

if((fa == 0.0

回想一下,对于诸如float之类的基本类型,没有像NULL / uninitialized这样的概念。相反,它们通常默认为0。

因此,具有以下含义f值将为字面值0

float f;

答案 3 :(得分: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分配值?无处。这是未定义的行为。

相关问题