2015-07-22 15 views
-6

Я работаю над проблемой в своем учебнике, и мне нужно сделать калькулятор угла треугольника. Я использовал для java, но Im не 100% на C, но я не понимаю логики в нем.Слишком много аргументов для вызова функции, что мне делать?

#include <stdio.h> 

static float angleB; 
static float angleA; 

float remainingAngle(float answer) 
{ 
    float answer= angleA+angleB; 
//redefinition of answer 
return 0; 
} 
//CANT TOUCH FROM HERE TO END 
int main(int argc, const char * argv[]) { 
    float angleA = 30.0; 
    float angleB = 60.0; 
    float angleC = remainingAngle(angleA,angleB); 
// to many arguments to function call (referring to angleC) 
    printf("the third angle is %.2f\n",angleC); 
    return 0; 
}  //END CANT TOUCH 

Я не знаю, что делать здесь.

+2

'Что делать?' -> предоставить правильное количество аргументов. Период. –

+0

Слишком много аргументов для continueAngle, а не printf. – 1983

+0

относительно этой линии: 'float angleA = 30.0;' Переменная «angleA» объявляется как float, поэтому значение инициализации также должно быть объявлено как float; Предложить: 'float angleA = 30.0f;' Обратите внимание на конечный «f». В опубликованном коде используется «двойной» инициализатор (по умолчанию, когда десятичная точка в инициализаторе двойная, если специально не указано иначе через конечный «f») – user3629249

ответ

1

В определении функции

float remainingAngle(float answer) 

функция remainingAngle() принимает один параметр.

Ото, в вызове функции

remainingAngle(angleA,angleB); 

вы передаете два аргумента.

Приведенный номер аргумента и тип должны соответствовать списку параметров в определении функции.


Это значит, что ваш код неверен.

  • Пункт 1. Локальные переменные будут тень глобальные из них. Возможно, это не то, что вы хотите. Изменение

    float angleA = 30.0; 
    float angleB = 60.0; 
    

    в

    angleA = 30.0; 
    angleB = 60.0; 
    
  • Пункт 2. Функция

    float remainingAngle(float answer) 
    { 
        float answer= angleA+angleB; 
    //redefinition of answer 
    return 0; 
    } 
    

    логически неправильно. Это скорее должно быть

    float remainingAngle(void) 
    { 
        float answer= angleA+angleB; 
        return answer; 
    } 
    

    и должен называться как

    float angleC = remainingAngle(); 
    

ПОСЛЕ EDIT:

согласно вашему требованию, вы можете сделать

float remainingAngle(float angleA, float angleB) 
{ 
    float answer= angleA+angleB; 
    return answer; 
} 

Однако это делает глобальные переменные бесполезными.

0

В дополнение к Souravs ответ вы могли бы сделать следующее:

float remainingAngle(float angA, float angB) 
{ 
    float answer = angA + angB; 
    return answer; 
} 

Таким образом, ваш звонок будет оставаться такой же.

И для логической стороны, что вы делаете:

Проходите два аргумента (значение angleA и стоимости angleB) функции remainingAngle. Там вы делаете расчет и возвращаете результат (answer).

+0

Вы правы, но в этом случае 'angleA' и' angleB' является глобальным, его не нужно передавать в качестве параметров. :-) –

+0

Я знаю, я просто написал это так, если переменные не являются глобальными. Тогда он также знает, что происходит. – DamBedEi

+0

Я думаю, что у меня это получилось, я принял ваше предложение, удалил статические поплавки и изменил функцию возврата на 180-й ответ таким образом, что угол обратно пропорционален увеличению + a " –

0

Дизайн вашей функции не хорошо:

static float angleB; 
static float angleA; 

float remainingAngle(float answer) 
{ 
    float answer= angleA+angleB; 
//redefinition of answer 
return 0; 
} 

Что мне делать?

  • В ответе нет никакого смысла; ответ - это то, что вы хотите получить. (Также нет смысла пропускать «пробел» для ответа. Anser - это скалярная переменная float. Просто передайте это.) Удалите аргумент answer.
  • Вы переопределяете answer как локальную переменную. После удаления аргумента с тем же именем это переопределение исчезает. Но в этом случае вы должны вернуть answer вместо 0. Вы могли бы обойтись без промежуточной переменной answer и вернуть выражение результата. Итак: Возврат искомого выражения
  • Ответ зависит от двух глобальных переменных. Функция должна работать на двух углах, которые вы передаете в качестве аргументов. Предоставьте две угловые аргументы функции и удалите глобальные переменные.
  • И, наконец, сумма трех углов в треугольнике составляет 180 °, поэтому ваш оставшийся расчет угла неправильный.

Собираем все вместе:

float remainingAngle(float a, float b) 
{ 
    return 180.0f - a - b; 
} 

и назвать его так:

float angleC = remainingAngle(angleA, angleB); 

Im используется для Java

Я не слишком хорошо знакомы с Java, но я не думаю, что функционалы на таких скалярах, как этот, являются фундаментальными в разных языках C и Java.

Смежные вопросы