Program zwraca -1 nie wiem dlaczego,- funkcja

Program zwraca -1 nie wiem dlaczego,- funkcja
Z2
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • Postów:20
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:

Kopiuj
 #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.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 12 godzin
  • Lokalizacja:Szczecin
1

Sformatowałem za Ciebie:

Kopiuj
#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.


edytowany 1x, ostatnio: kq
Z2
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • Postów:20
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!

lisu1411
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Biała
  • Postów:29
2

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

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

Powinno być:

Kopiuj
printf("How many shares of %c would you like to sell?\n", Name_Of_Sector);
Z2
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • Postów:20
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:

Kopiuj
    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.

edytowany 1x, ostatnio: zjm2014
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

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

Kopiuj
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);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
0

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

_13th_Dragon
A no na linksie nie działa. zamień na: while(getchar()!='\n') {}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.