• 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

VPS Starter Arubacloud
0 głosów
119 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ź 426 wizyt
0 głosów
1 odpowiedź 375 wizyt
pytanie zadane 27 stycznia 2018 w C i C++ przez luksonik Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 438 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...