• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Program w C++ myli zawartość jednej z tabeli z druga.

Aruba Cloud - Virtual Private Server VPS
0 głosów
531 wizyt
pytanie zadane 17 marca 2020 w C i C++ przez Downoodle Nowicjusz (240 p.)
zamknięte 18 marca 2020 przez Downoodle

Napisałem program który losuje mi liczbe w danym zakresie, a pozniej podstawia ją pod tabele ktora bedzie wypisana cout'em. W tabelach są slowa wiec uzylem string'a. Juz pokazuje screen z konsoli i swoj kod. Dodam, że tabela której dane wypisuje nie jest użyta nigdzie, jest jedynie wprowadzona.

Oto mój kod:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{

    string a,pow[7],popow[5],tak[15],nie[7],powitanie,popowitaniu;
    int x,y;
    //a=odpowiedz
    //x=wylosowana liczba
    //y=wylosowana liczba

    pow[0]="Witaj w Milionerach! Milo mi cie tutaj widziec."; pow[4]="Witaj w teleturnieju, milo mi cie poznac!";
    pow[1]="Witamy w Milionerach!"; pow[5]="Ciesze sie ze tu jestes. Witam w Milionerach!";
    pow[2]="Czesc, zapraszam na miejsce. Witam w Milionerach"; pow[6]="Dzien dobry, witam w Milionerach!";
    pow[3]="Czesc, witaj w Milionerach. Zapraszam na miejsce."; pow[7]="Milo mi cie poznac. Witaj w Milionerach! Prosze, usiadz sobie";

    popow[0]="Zycze ci wygranej. Zaczynajmy!"; popow[3]="Pora na troche adrenaliny. Zaczynajmy!";
    popow[1]="Nie ma co dluzej owijac w bawelne. Zaczynajmy!"; popow[4]="Usiadz wygodnie. Zaczynajmy!";
    popow[2]="Co by tu wiecej mowic, przystapmy do gry!"; popow[5]="Zycze ci wygranej. Przystapmy do gry!";

    tak[0]="To poprawna odpowiedz!"; tak[4]="Zgadza sie!"; tak[8]="Wybrana przez ciebie odpowiedz jest prawidlowa!"; tak[12]="Zaznaczam odpowiedz... Na panelu pokazuje, ze jest to... Poprawna odpowiedz! Brawo!";
    tak[1]="Spojrzmy... Na ekranie widze, ze jest to poprawna odpowiedz!"; tak[5]="Zaznaczyles poprawna odpowiedz!"; tak[9]="Wybrano poprawna odpowiedz!"; tak[13]="Sprawdzmy... Tak, jest to poprawna odpowiedz!";
    tak[2]="Tak! To poprawna odpowiedz!"; tak[6]="Juz zaznaczam... No, musze ci powiedziec... Ze jest to poprawna odpowiedz!"; tak[10]="Zaznaczyles poprawna odpowiedz! Brawo!"; tak[14]="Niestety... Zaznaczono poprawna odpowiedz!";
    tak[3]="Zgadza sie! Zaznaczyles poprawna odpowiedz"; tak[7]="Tak! Jest to poprawna odpowiedz"; tak[11]="Jest to poprawna odpowiedz!"; tak[15]="Juz zaznaczam... Gratuluje jest to poprawna odpowiedz!";

    nie[0]="Niestety odpowiedz jest bledna"; nie[2]=""; nie[4]="Spojrzmy... Widze ze nie jest to poprawna odpowiedz."; nie[6]="Juz zaznaczam... Niestety nie jest to poprawna odpowiedz";
    nie[1]="Wybrana odpowiedz jest zla. Przykro mi"; nie[3]="Jest to niepoprawna odpowiedz."; nie[5]="Zaznaczona odpowiedz... Jest bledna."; nie[7]="Spojrzmy... Nie jest to poprawna odpowiedz";

    srand(time(0));
    x=rand()%8;
    powitanie=pow[x];

    srand(time(0));
    y=rand()%6;
    popowitaniu=popow[y];

    cout<<powitanie<<endl; cout<<popowitaniu<<endl;
    cout<<""<<endl;
    cout<<""<<endl;
    cout<<""<<endl; cout<<""<<endl; cout<<""<<endl; cout<<""<<endl;
    cin>>a;

    if((a=="B")||(a=="b"))
    {

        cout<<""<<endl;
        cout<<""<<endl;

    }
    else
    {

        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;

    }
    cout<<""<<endl; cout<<""<<endl;
    cout<<""<<endl; cout<<""<<endl; cout<<""<<endl; cout<<""<<endl;
    cin>>a;

    if((a=="D")||(a=="d")) cout<<""<<endl;
    else cout<<""<<endl;

}

}

komentarz zamknięcia: uzyskalem odp
komentarz 17 marca 2020 przez tkz Nałogowiec (42,020 p.)
Nie program, tylko Ty mylisz. Wychodzisz poza zakres tablicy, wszędzie o 1 za dużo, skoro masz tablice[15], to największy możliwy adres do odwołania, to tablica[14].

1 odpowiedź

+1 głos
odpowiedź 17 marca 2020 przez adrian17 Mentor (352,580 p.)

    srand(time(0));
    x=rand()%8;
    powitanie=pow[x];
 
    srand(time(0));
    y=rand()%6;
    popowitaniu=popow[y];

Możliwy maksymalny indeks wychodzi Ci o 1 większy niż rozmiar tablicy - więc wychodzisz poza tablicę.

(BTW, srand() wywołuje się raz na cały program)

(BTW2, po co te wszystkie zmienne deklarujesz na samej górze funkcji? to nie C ;) )

komentarz 17 marca 2020 przez Downoodle Nowicjusz (240 p.)
Dzieki za radę z tym srand, a jeśli chodzi o zmienne to masz na myśli tabele którym przypisałem zwroty? Jeśli tak to mógłbyś mi udzielić rady jak zrobić to szybciej i sprawniej, gdyż pytań mam jeszcze co nie miara i długo mi to zajmie jeśli będę robił to tym swoim sposobem :D Program był moim pomysłem, nie widziałem tego wcześniej na yt więc błędy to norma :))
komentarz 17 marca 2020 przez adrian17 Mentor (352,580 p.)

a jeśli chodzi o zmienne to masz na myśli tabele którym przypisałem zwroty?

Mam na myśli że zamiast

string a,pow[7],popow[5],tak[15],nie[7],powitanie,popowitaniu;
int x,y;
// ...
x=rand()%8;
powitanie=pow[x];

Można

int x=rand()%8;
string powitanie=pow[x]; // lub od razu: pow[rand()%8]

Podobnie zamiast

string a,pow[7],popow[5],tak[15],nie[7],powitanie,popowitaniu;
int x,y;
// ...
pow[0]="Witaj w Milionerach! Milo mi cie tutaj widziec."; pow[4]="Witaj w teleturnieju, milo mi cie poznac!";
pow[1]="Witamy w Milionerach!"; pow[5]="Ciesze sie ze tu jestes. Witam w Milionerach!";
pow[2]="Czesc, zapraszam na miejsce. Witam w Milionerach"; pow[6]="Dzien dobry, witam w Milionerach!";
pow[3]="Czesc, witaj w Milionerach. Zapraszam na miejsce."; pow[7]="Milo mi cie poznac. Witaj w Milionerach! Prosze, usiadz sobie";

Można

string powitania[] = {
    "powitanie1",
    "powitanie2",
    "etc"
};

 

Podobne pytania

+2 głosów
2 odpowiedzi 273 wizyt
pytanie zadane 9 kwietnia 2015 w SQL, bazy danych przez ukasz112 Początkujący (390 p.)
0 głosów
0 odpowiedzi 332 wizyt
pytanie zadane 2 grudnia 2018 w C i C++ przez jeden dwa Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 453 wizyt
pytanie zadane 10 maja 2016 w C i C++ przez veryhotshark Obywatel (1,620 p.)

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,663 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...