计算器具有一个功能

时间:2014-11-25 12:39:00

标签: c

此计算器应使用一个功能(开关/外壳)。 不幸的是我收到编译错误,我不明白为什么。

#include <stdio.h>

float calculate(char optr, float opr1, float opr2) {

switch(optr) {
case '+': ergebnis = opr1+opr2; break;
case '-': ergebnis = opr1-opr2; break;
case '*': ergebnis = opr1*opr2; break;
case '/': ergebnis = opr1/opr2; break;
case 'q': exit(0);
default: cout <<"unbekanntes Rechenzeichen...\n"; return1;
}
return ergebnis;
}


int main(void) {
char optr;
float opr1, opr2, ergebnis;

//Eingabe
printf("\nEingabe Operator(+,-,*,/,q)"); scanf("%c", &optr);
printf("\nEingabe Zahl1"); scanf("%f", &opr1);
printf("\nEingabe Zahl2"); scanf("%f", &opr2);

//Verarbeitung
ergebnis = calculate(char optr, float opr1, float opr2);//Ausgabe
printf("\nErgebnis: %f\n", ergebnis);
return 0;
}

我需要改变什么?

prog.c: In function ‘calculate’:
prog.c:6:15: error: ‘ergebnis’ undeclared (first use in this function)
 case '+': ergebnis = opr1+opr2; break;
           ^
prog.c:6:15: note: each undeclared identifier is reported only once for each function it appears   in
prog.c:10:5: error: implicit declaration of function ‘exit’ [-Werror=implicit-function-declaration]
 case 'q': exit(0);
 ^
prog.c:10:15: error: incompatible implicit declaration of built-in function ‘exit’ [-Werror]
 case 'q': exit(0);
           ^
prog.c:11:14: error: ‘cout’ undeclared (first use in this function)
 default: cout <<"unbekanntes Rechenzeichen...\n"; return1;
          ^
prog.c:11:55: error: ‘return1’ undeclared (first use in this function)
 default: cout <<"unbekanntes Rechenzeichen...\n"; return1;
                                                   ^
prog.c: In function ‘main’:
prog.c:27:26: error: expected expression before ‘char’
 ergebnis = calculate(char optr, float opr1, float opr2);//Ausgabe
                      ^
prog.c:27:26: error: too few arguments to function ‘calculate’
prog.c:3:11: note: declared here
 float calculate(char optr, float opr1, float opr2) {
       ^
prog.c: In function ‘calculate’:
prog.c:14:5: error: control reaches end of non-void function [-Werror=return-type]
 }
 ^
cc1: all warnings being treated as errors

编辑:对不起,忘记了错误

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

5 个答案:

答案 0 :(得分:0)

更改

ergebnis = calculate(char optr, float opr1, float opr2);

ergebnis = calculate(optr,opr1,opr2);

并在float ergebnis;函数中添加calculate。同时将return1;更改为return 1;。您还需要进行一些检查以避免被零除。您在cout案例中也使用了printf而不是default。您需要包含<stdlib.h>才能使用exit(0);

答案 1 :(得分:0)

  • 您需要在return和1之间留出空格,如下所示:

    返回1;

  • 需要调用没有任何类型信息的方法,如:

    ergebnis = calculate(optr,opr1,opr2);

  • 在您的计算器函数中,您使用的是变量ergebnis但没有定义它,所以您应该如下定义:

    float ergebnis = 0;

  • 您正在使用c,因此请删除cout并使用printf进行更改。

  • 根据退出函数的错误,您需要包含stdlib.h,如下所示

    #include

这应该是整体代码:

#include <stdio.h>
#include <stdlib.h>

float calculate(char optr, float opr1, float opr2) {
    float ergebnis = 0;
    switch(optr) {
    case '+': ergebnis = opr1+opr2; break;
    case '-': ergebnis = opr1-opr2; break;
    case '*': ergebnis = opr1*opr2; break;
    case '/': ergebnis = opr1/opr2; break;
    case 'q': exit(0);
    default: printf("unbekanntes Rechenzeichen...\n"); return 1;
}
return ergebnis;
}

int main(void) {
char optr;
float opr1, opr2, ergebnis;
//Eingabe
printf("\nEingabe Operator(+,-,*,/,q)"); scanf("%c", &optr);
printf("\nEingabe Zahl1"); scanf("%f", &opr1);
printf("\nEingabe Zahl2"); scanf("%f", &opr2);
//Verarbeitung
ergebnis = calculate(optr, opr1, opr2);//Ausgabe
printf("\nErgebnis: %f\n", ergebnis);
return 0;
}

答案 2 :(得分:0)

这对你有用。你做错了一些事情:

  • exit()位于库stdlib.h
  • 你的回报太多了
  • 您忘了声明ergebnis

固定代码:

#include <stdio.h>
#include <stdlib.h>

float calculate(char optr, float opr1, float opr2) {
    float ergebnis;
    switch(optr) {
        case '+': ergebnis = opr1+opr2; break;
        case '-': ergebnis = opr1-opr2; break;
        case '*': ergebnis = opr1*opr2; break;
        case '/': ergebnis = opr1/opr2; break;
        case 'q': exit(0);
        default: printf("unbekanntes Rechenzeichen...\n");
    }
    return ergebnis;
}

int main(void) {
    char optr;
    float opr1, opr2, ergebnis;

    //Eingabe
    printf("\nEingabe Operator(+,-,*,/,q)"); scanf("%c", &optr);
    printf("\nEingabe Zahl1"); scanf("%f", &opr1);
    printf("\nEingabe Zahl2"); scanf("%f", &opr2);

    //Verarbeitung
    ergebnis = calculate(optr,  opr1,  opr2);//Ausgabe
    printf("\nErgebnis: %f\n", ergebnis);
    return 0;
}

修改

我也建议你从德语到德语; D用英语单词编程! (例如结果,输入,输出等)所以更多的人可以理解你的代码并更快地理解它!

答案 3 :(得分:0)

ergebnis = calculate(char optr, float opr1, float opr2);//Ausgabe

        float Calculate(char optr, float opr1, float opr2)
    {

        switch (optr)
        {
            case '+': return opr1 + opr2;
            case '-': return opr1 - opr2;
            case '*': return opr1 * opr2; 
            case '/': return opr1 / opr2;
            case 'q': return 0f;
            default: return 0f;
        }
    }

你的&#34;计算功能只能返回一个浮动&#34;

答案 4 :(得分:0)

如果问题与编译错误有关,请首先提供这些错误的输出。

它可能来自您的代码的这一部分:

float calculate(char optr, float opr1, float opr2) {

switch(optr) {
case '+': ergebnis = opr1+opr2; break;
case '-': ergebnis = opr1-opr2; break;
case '*': ergebnis = opr1*opr2; break;
case '/': ergebnis = opr1/opr2; break;
case 'q': exit(0);
default: cout <<"unbekanntes Rechenzeichen...\n"; return1;
}
return ergebnis;
}

在使用或返回变量之前,您没有定义变量ergebnis。请注意,这并不是因为您必须从ergebnis函数将此函数返回到名为main()的变量中,您必须使用相同名称将其调用到calculate(...)函数中。

另外,在调用calculate()函数

时,无需指定参数类型