-1

変数が空かnullかをチェックする行で文字が不正に使用され続けました。

なぜこれが起こったのか誰かが知っていますか?

ここでのエラーポイント:

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

何がこのエラーを引き起こしているのかわからない前に動作しましたが。

編集:

コードを変更しました。エラーは関数sinfaのパラメーターが少なすぎます。

この関数に一度に1つのパラメーターのみを渡したいのですが、それを行うために別の関数を作成して、個別に対応できるようにする必要がありますか?

ありがとうございました。:)

#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

リテラル文字列をfloat値と比較しようとしたため、エラーが表示されます。

空の文字列のテストも間違っています。文字列がnullまたは空かどうかを確認するには、次のコードを使用する必要があります(のタイプがであるfpと想定char *)。

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

sinfa関数に有効なプロトタイプがありません。関数定義のパラメーターnum1に型指定子を追加します。num2

そして、標準によれば、main関数のプロトタイプは次のいずれかである必要があります

int main(void)

また

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

あなたは間違っています。

scanf入力変換中にエラーが発生したかどうかを確認しようとしていると思います。これを行うには、関数を使用して結果をscanf検査し、グローバルエラー状態を確認する必要がありferrorます(またはerrno値を直接確認します)。

于 2013-01-30T00:40:11.223 に答える
1

floatと文字列リテラルを比較しているためにエラーが表示されます。

if((fa == "")

floatと数値/floatリテラルの比較のみを実行できます。つまり、次のようになります。

if((fa == 0.0

floatなどのプリミティブ型にはNULL/初期化されていないなどの概念がないことを思い出してください。代わりに、通常はデフォルトで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 に答える