Problem dotyczący działania programu

0

Witam jak w tytule mam problem z działaniem programu. Mianowicie program nie zwraca żadnych wartości. poniżej załączam kod programu.

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

int dodawanie(int a, int b){
int c=a+b;
return c;}

int odejmowanie(int a, int b){
int c=a-b;
return c;}

int mnozenie (int a, int b){
int c=a*b;
return c;}

int dzielenie(int a, int b){
float c=a/b;
return c;}

int potegowanie( int a, int b ){
    double c=pow(a,b);
    return c;}

int cosinus(int a){
    float c=cosf(a);
    return c;
}

float sinus(float x){
    printf("\n WPROWADZ WARTOSC:");
    scanf("%f",&x);
    float c=sinf(x);
    return c;
}

int Pierw_N_Stopnia(int x, int n){
    printf("\n WPROWADZ PODSTAWE X:");
    scanf("%d",&x);
    printf("\n WPROWADZ POTEGE N:");
    scanf("%d",&n);
    float c=x^(1/n);
return c;}

int silnia(int n){
    int c,i;
    c=1;
    printf("Podaj liczbe, ktorej silnie chcesz obliczyc: \n");
    scanf("%d",&n);
    n=i;
    while(i>0)
            c*=i--;
    return c;}

int main()
{
    int a,b,c,x,y,n;
    printf("\n Wczytaj Pierwsza liczbe  : ");
    scanf("%d",&a);
    printf("\n Wczytaj Druga liczbe  : ");
    scanf("%d",&b);
    printf("Ktore Dzialanie Wybierasz\n 1.)Dodawanie\n 2.)Odejmowanie\n 3.)Mnozenie\n 4.)Dzielenie\n 5.)Cosinus \n 6.)Sinus \n 7.)a pierwiastek n\n 8.) silnia");
    scanf("%d",&c);
    printf("\n Wynik Dzialania Wynosi:");

    switch(c){
    case1:printf("%d\n",dodawanie(a,b));break;
    case2:printf("%d\n",odejmowanie(a,b));break;
    case3:printf("%d\n",mnozenie(a,b));break;
    case4:printf("%d\n",dzielenie(a,b));{
        if(b=0){
            printf("BLAD DZIELENIA PRZEZ 0 WYBIERZ INNE B");}
            else{
                printf("%.2f",dzielenie(a,b));}
            };break;
    case5:printf("%d\n",potegowanie(x,y));break;
    case6:printf("%f\n",cosinus(x));break;
    case7:printf("%f\n",sinus(x));break;
    case8:printf("%d\n",silnia(n));{
    if (n<0){
        printf("BLAD. SILNIA Z LICZBY UJEMNEJ. WPROWADZ DODATNIA LICZBE ");
    }} ;break;}
return 0;}
1

Poczytaj komunikaty kompilatora, mi całą masę wyrzuciło. np korzystasz ze zmiennych którym nie nadałeś wartości ani ich nie wczytałeś (między innymi x i y przy potęgowaniu). Między case a cyferką ma być spacja, inaczej nie przejdzie. Kompilator mi zresztą napisał "warning: unused label case1" i tak przez wszystkie numerki.

edit: przy dzieleniu masz if(b=0), co ustawi b na zero, a że to jak najbardziej możliwe if zawsze będzie prawdziwy. Kompilator jak najbardziej zauważył i zwrócił mi uwagę że tam ma być ==

1

Przede wszystkim - formatowanie!
To

int dodawanie(int a, int b){
int c=a+b;
return c;}

Nie jest czytelne. O wiele ładniejsze jest to:

int dodawanie(int a, int b)
{
	return a + b; // Nie potrzeba dodatkowej zmiennej
}

Samo IDE za Ciebie może sformatować kod.

Problemów jest kilka.
Po pierwsze nie ma spacji pomiędzy case a liczbą.
Po drugie - poniżej kod

if (b = 0) 

To jest przypisanie. Musisz użyć dwóch znaków równości aby porównać.

Twoja funkcja dzielenie zwraca int a powinna albo float albo double.
Tak samo dla case 6 - cosinus.

W funkcji silnia próbujesz przypisać niezainicjalizowaną zmienną i do n.

To samo tyczy się funkcji main i zmiennych x, y, z oraz n w case 5, 6, 7 oraz 8.

Te klamry są zbędne:

case 8:
    printf("%d\n", silnia(n));
    { // Tutaj
        if (n < 0)
        {
            printf("BLAD. SILNIA Z LICZBY UJEMNEJ. WPROWADZ DODATNIA LICZBE ");
        }
    }; // I tu
    break;
0

Dzięki. działa

1 użytkowników online, w tym zalogowanych: 0, gości: 1