Program zwraca -1 nie wiem dlaczego,- funkcja

0

Cześć.
Ucze się wykorzystywania funkcji żeby nie pisać kodu spaghetti tylko robić programy skladajace sie z podprogramow.
Nie mam pojecia zielonego dlaczego wywala mi -1 przy wyborze opcji nr 1 i przechodzi dalej przy wybraniu opcji nr 2.

Oto kod:

 #include <stdio.h>


void SharesManagement (int cash,int Value_Of_Share,int Number_Of_Sector_Shares,char Name_Of_Sector);

int main()
  {
char Finance [] = "Financial Sector";
int Value_Of_Share_Finances,cash=100000,Number_Of_Shares_Finance;


SharesManagement(cash,Value_Of_Share_Finances,Number_Of_Shares_Finance,*Finance);


   return 0;
  }



void SharesManagement (int cash,int Value_Of_Share,int Number_Of_Sector_Shares,char Name_Of_Sector)

{
int Choice,Number_Of_Shares;

    printf("Would you like to buy or sell?\n");
    printf("1.I'd like to buy\n");
    printf("2.I'd like to sell\n");
    scanf("%d",&Choice);




      if(Choice==1)
    {


    printf("How many shares of %c would you like to buy? (maximum is: %d\n)",Name_Of_Sector,(cash/Value_Of_Share));
    scanf("%d",&Number_Of_Shares);
    if(Number_Of_Shares*Value_Of_Share>cash){printf("Insufficient funds\n");}
    cash=cash-Number_Of_Sector_Shares*Value_Of_Share;
    Number_Of_Sector_Shares=Number_Of_Sector_Shares+Number_Of_Shares;

    }


    else
    {
    printf("How many shares of %c would you like to sell?\n"),Name_Of_Sector;
    scanf("%d",&Number_Of_Shares);

    if(Number_Of_Shares>Number_Of_Sector_Shares){printf("You don't have these shares!\n");}

    cash=cash+Number_Of_Shares*Value_Of_Share;
    Number_Of_Sector_Shares=Number_Of_Sector_Shares-Number_Of_Shares;


    }
    }

Proszę o sugestie/konstruktywną krytykę/ironiczne komentarze z których mogę się czegoś nauczyć - cokolwiek.

0

Naucz ty sie najpierw formatować kod albo używać IDE które będzie go formatować za ciebie.

1

Sformatowałem za Ciebie:

#include <stdio.h>

void SharesManagement(int cash, int Value_Of_Share, int Number_Of_Sector_Shares, char Name_Of_Sector);

int main()
{
    char Finance[] = "Financial Sector";
    int Value_Of_Share_Finances, cash = 100000, Number_Of_Shares_Finance;

    SharesManagement(cash, Value_Of_Share_Finances, Number_Of_Shares_Finance, *Finance);

    return 0;
}

void SharesManagement(int cash, int Value_Of_Share, int Number_Of_Sector_Shares, char Name_Of_Sector)
{
    int Choice, Number_Of_Shares;

    printf("Would you like to buy or sell?\n");
    printf("1.I'd like to buy\n");
    printf("2.I'd like to sell\n");
    scanf("%d", &Choice);

    if (Choice == 1) {

        printf("How many shares of %c would you like to buy? (maximum is: %d\n)", Name_Of_Sector, (cash / Value_Of_Share));
        scanf("%d", &Number_Of_Shares);
        if (Number_Of_Shares * Value_Of_Share > cash) {
            printf("Insufficient funds\n");
        }
        cash = cash - Number_Of_Sector_Shares * Value_Of_Share;
        Number_Of_Sector_Shares = Number_Of_Sector_Shares + Number_Of_Shares;

    } else {
        printf("How many shares of %c would you like to sell?\n"), Name_Of_Sector;
        scanf("%d", &Number_Of_Shares);

        if (Number_Of_Shares > Number_Of_Sector_Shares) {
            printf("You don't have these shares!\n");
        }

        cash = cash + Number_Of_Shares * Value_Of_Share;
        Number_Of_Sector_Shares = Number_Of_Sector_Shares - Number_Of_Shares;
    }
}

To ma być C czy C++?

Nigdzie nie ustawiasz wartości Value_Of_Share_Finances w main(), więc przy próbie pobrania wartości tej zmiennej masz UB.

0

Shalom - bardzo dobra uwaga. Od tej pory na pewno będę o tym pamiętał.

Kq - to ma być C. Masz racje - wartośc nie jest ustawiona, przeoczyłem to,dziękuje!

2

Jestem bardzo nowy ale wiem, że w tej linijce pomyliłeś nawias :)

else {
        printf("How many shares of %c would you like to sell?\n"), Name_Of_Sector;
        scanf("%d", &Number_Of_Shares);

Powinno być:

printf("How many shares of %c would you like to sell?\n", Name_Of_Sector);
0

Racja lisu.

Sorry za offtop ale mysle ze niepotrzebne byłoby zakładanie nowego tematu.

Wiecie może jak w C obsłużyć stumien wejscia?

Chodzi o ten kawałek kodu:

    do
    {

        printf("How many rounds should the game last for?\n");
       
        scanf("%d",&Number_Of_Rounds);
    } while(!scanf("%d",Number_Of_Rounds)); 

Po wprowadzenia na przykład litery program sie zapętla.

Wiem że w c++ czyściło się to cin.clear() i cin.sync() - jak wyglada sprawa z czyszczeniem w C? Dodam ze pracuje na Linuxie.

1

Wlaśnie musisz zakładać nowy temat aby móc zaznaczyć post który rozwiązuje twój problem:

do
   {
    printf("How many rounds should the game last for?\n");
    fflush(stdin); // nie powinien działać ale pod windows na większości kompilatorach działa, można zamienić na while(getchar()!='\n') {}
   } while(scanf("%d",&Number_Of_Rounds)!=1);
0

Skopiowałem Twój kod i on tez powoduje zapetlenie sie programu (przynajmniej u mnie). Moze flush mi nie działa na Linuxie?

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