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

question-closed Błąd w prostym programie

Object Storage Arubacloud
0 głosów
130 wizyt
pytanie zadane 6 marca 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
zamknięte 6 marca 2020 przez Nabuchadonozor

Witam serdecznie w tę jakże ciemną noc,

otóż napotkał mnie bardzo dziwny problem - przy kompilacji programu różne błędy się robią, np. zamiast pokazać złą odpowiedź, program po prostu się crashuje lub po pokazaniu jaka powinna być poprawna, nie pokazuje następnej pętli i wywala po chwili program.... A miałem się nauczyć niemca, bo dziś ustna praca klasowa... Dziękuję z góry za wszelką okazaną pomoc! 

#include <iostream>
#include <cstdlib>

using namespace std;

    string p[3];
    string odp;
    string o[3];
    int x;

int main()
{
    p[0]="Wie gecht es dir?: ";
    o[0]="Mir geht es gut.";

    p[1]="Wie fuhlst du dich heute?: ";
    o[1]="Ich fuhle mich gut.";

    p[2]="Wie verhalten Sie sich in Notfallsitutationen?: ";
    o[2]="Ich gerate in Panist. Ich bin gestresst.";

    p[3]="Was machst du fur Gesundheit?: ";
    o[3]="Ich trinke Wasser. Ich trainiere viel. Ich esse viel Gemuse un Obst.";

    do{
            for(int i=0; i<40; i++){
                x=rand()%4;
                cout << p[x];
                cin >> odp;

                if(odp==o[x])
                    cout << endl << "Gratulacje!" << endl << endl;
                else
                    cout << "Zle! Powinno byc tak: " << o[x] << endl << endl;
            }
    }while(true);



    return 0;
}

 

komentarz zamknięcia: getline(std::cin,odp); zamiast zwyklego cin >> odp; bo przeciez spacje działają jak wpisywanie kolejnej zmiennej!

2 odpowiedzi

0 głosów
odpowiedź 6 marca 2020 przez obl Maniak (51,280 p.)

Masz tablicę p i tablicę o które mają 3 elementy a ty inicjalizujesz 4. Nic więc dziwnego w tym, że aplikacja się wywala, gdy odwołujesz się do pamięci, do której odwoływać się nie powinieneś.

p[3]="Was machst du fur Gesundheit?: ";
o[3]="Ich trinke Wasser. Ich trainiere viel. Ich esse viel Gemuse un Obst."; 

 

komentarz 6 marca 2020 przez Nabuchadonozor Gaduła (3,120 p.)
A ja już fiszki zrobiłem, bo nie byłem pewien czy ktoś odpowie w miarę wcześnie...

Dziękuję, masz rację. Ale istnieje właśnie jeden problem jeszcze, bo jak jest właśnie x=rand()%3; to p[3] wcale się nie wyświetla i przez to, że próbowałem to jakoś zrobić, zrobiłem kolejny błąd z tą inicjalizacją 4. Masz może jakiś pomysł dobry człowieku? :)
1
komentarz 6 marca 2020 przez obl Maniak (51,280 p.)
#include <iostream>
#include <cstdlib>
#include <string>


using namespace std;

string p[4];
string odp;
string o[4];
int x;

int main()
{
	p[0] = "Wie gecht es dir?: ";
	o[0] = "Mir geht es gut.";

	p[1] = "Wie fuhlst du dich heute?: ";
	o[1] = "Ich fuhle mich gut.";

	p[2] = "Wie verhalten Sie sich in Notfallsitutationen?: ";
	o[2] = "Ich gerate in Panist. Ich bin gestresst.";

	p[3] = "Was machst du fur Gesundheit?: ";
	o[3] = "Ich trinke Wasser. Ich trainiere viel. Ich esse viel Gemuse un Obst.";

	do {
		for (int i = 0; i < 40; i++) {
			x = rand() % 4;
			cout << p[x];
			getline(std::cin, odp);

			cout << odp;

			if (odp == o[x])
				cout << endl << "Gratulacje!" << endl << endl;
			else
				cout << "Zle! Powinno byc tak: " << o[x] << endl << endl;
		}
	} while (true);

	return 0;
}

Źle dane przechwytujesz. Jak masz spacje to ci nie wczyta poprawnie całego zdania. Nawet takiego napisanego po niemiecku.

 

komentarz 6 marca 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Jesteś królem! Wielkie dzięki!
0 głosów
odpowiedź 6 marca 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Zamieniając x=rand()%4; na x=rand()3%; - program nie wyświetla p[3]. Ponadto wpisując dobrą odpowiedź - program traktuje ją jak złą, do tego jeszcze wyswietla kolejne pytania i uznaje je za złe. W konsoli widać to tak:

 

Wie verhalten Sie sich in Notfallsitutationen?: Ich gerate in Panist. Ich bin gestresst.
Zle! Powinno byc tak: Ich gerate in Panist. Ich bin gestresst.

Wie verhalten Sie sich in Notfallsitutationen?: Zle! Powinno byc tak: Ich gerate in Panist. Ich bin gestresst.

Wie fuhlst du dich heute?: Zle! Powinno byc tak: Ich fuhle mich gut.

Wie fuhlst du dich heute?: Zle! Powinno byc tak: Ich fuhle mich gut.

Wie verhalten Sie sich in Notfallsitutationen?: Zle! Powinno byc tak: Ich gerate in Panist. Ich bin gestresst.

Wie fuhlst du dich heute?: Zle! Powinno byc tak: Ich fuhle mich gut.

Wie gecht es dir?: Zle! Powinno byc tak: Mir geht es gut.

Wie gecht es dir?:

Podobne pytania

0 głosów
1 odpowiedź 474 wizyt
0 głosów
1 odpowiedź 382 wizyt
pytanie zadane 27 stycznia 2018 w C i C++ przez luksonik Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 461 wizyt

92,691 zapytań

141,603 odpowiedzi

320,103 komentarzy

62,051 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...