Pomoc przy zadaniu odgadującym dany dzień tygodnia dziwny błąd związany z wyjątkami.

0

Proszę was o pomoc bo wyskakuje mi dziwny komunikat niby wszystko działa tak jak powinno tzn każda zmienna ma takie wartość jakie powinna mieć ale program się nie kompiluje i wywala mi coś takiego "Zgłoszono nieobsługiwany wyjątek: naruszenie dostępu do odczytu.
wsk_przestepny było 0x1." Pisze w visual stuido. Chce zaznaczyć że uczę się na bieżąco z gory dziękuje i pozdrawiam.

// ConsoleApplication3.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include "pch.h"
#include <iostream>
#include<cstdlib>
using namespace std;
int przystepnosc(int *wsk_rok) {
	bool przestepny = false;
	bool *wsk_przestepny = &przestepny;
	cout << *wsk_rok;
	if (*wsk_rok % 4 == 0 && *wsk_rok % 100 == 0 || *wsk_rok % 400 == 0) {
		bool przestepny = true;
	}
	else {
		bool przestepny = false;
	}
	cout << "wartosc przestepny" << przestepny<<endl;
	return *wsk_przestepny;
}
int main(bool *wsk_przestepny)
{

	int liczbaDniWmiesiacu;
	int liczbaDni[] =
	{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
	int dzien, miesiac, rok;
	cout << "Podaj dzien: " << endl;
	cin >> dzien;
	cout << "Podaj miesiac: " << endl;
	cin >> miesiac;
	cout << "Podaj rok: " << endl;
	cin >> rok;
	int *wsk_rok = &rok;
	liczbaDniWmiesiacu = (liczbaDni[miesiac] + dzien) % 7;
	switch (liczbaDniWmiesiacu) {
	case 0:
		cout << "Poniedziałek" << endl;
		break;
	case 1:
		cout << "Wtorek" << endl;
		break;
	case 2:
		cout << "Sroda" << endl;
		break;
	case 3:
		cout << "Czwartek" << endl;
		break;
	case 4:
		cout << "Piatek" << endl;
		break;
	case 5:
		cout << "Sobota" << endl;
		break;
	case 6:
		cout << "Niedziela" << endl;
		break;

	}
	przystepnosc(wsk_rok);
	cout <<"Drukuje" <<*wsk_przestepny <<endl; //błąd wyskakuje tutaj
	getchar(); getchar();


}




1

Mówisz, że się uczysz, ale postępów za bardzo nie widać.

int przystepnosc(int *wsk_rok) {
    bool przestepny = false;
    bool *wsk_przestepny = &przestepny;
    cout << *wsk_rok;
    if (*wsk_rok % 4 == 0 && *wsk_rok % 100 == 0 || *wsk_rok % 400 == 0) {
        bool przestepny = true;
    }
    else {
        bool przestepny = false;
    }
    cout << "wartosc przestepny" << przestepny<<endl;
    return *wsk_przestepny;
}
  • Przez co najmniej dwa tygodnie nie udało ci się poprawić nazwy tej funkcji na poprawną.
  • Po co tyle wskaźników? Inty przekazuj przez wartość
  • Po co wskaźnik na zmienną, którą masz w zakresie?
  • bool przestepny = true; tak definiujesz nową zmienną, a nie przypisujesz wartość starej
  • cout << "wartosc przestepny" << przestepny<<endl; SRP, jak funkcja coś sprawdza to nie wypisuje
int main(bool *wsk_przestepny)

WTF

    przystepnosc(wsk_rok);
    cout <<"Drukuje" <<*wsk_przestepny <<endl; //błąd wyskakuje tutaj

Nigdzie nie przypisujesz wskaźnika, więc masz tam losowe dane.

0

Dzięki za tak szybką odpowiedz.
Masz rację zaniedbałem przez ostatni tydzien naukę byłem zajęty czymś innym. Napisałem to żebyście mieli na uwadze że jestem nowicjuszem.
Nie poprawiam nazwy tej funkcji bo to mały błąd wolę się skupic na funkcjonalności kod został skopiowany z poprzedniego programu oddałem taki na zajęciach nauczyciel nawet nie zauważył może i zauważył ale nie zwrócił uwagi.
Wskazniki bo trochę po omacku próbuje przekazać wartość bool przestepny do main i gdy robiłem to bez wskaźnika wartość zawsze była równa jeden zanim poproszę was o pomoc za każdym razem próbuje sobie poradzić samemu.
Mógłbyś mi wyjaśnic co znaczy SRP?
a co kodu zrobiłem w ten sposób i tak wyskakuje ten sam błąd

int przystepnosc(int *wsk_rok) {
	bool przestepny ;
	przestepny = true;
	bool *wsk_przestepny = &przestepny;
	cout << *wsk_rok;
	if (*wsk_rok % 4 == 0 && *wsk_rok % 100 == 0 || *wsk_rok % 400 == 0) {
		*wsk_przestepny = true;
	}
	else {
		*wsk_przestepny = false;
	}
	cout << "wartosc przestepny" << przestepny<<endl;
	return *wsk_przestepny;
0

Przeczytaj akapit o funkcjach w swoim kursie/książce, konkretnie o wartościach zwracanych.

  • nie potrzebujesz w tym zadaniu wskaźników
  • używasz ich źle
  • nie używasz wartości zwracanej przez funkcję, więc nic dziwnego że nic się nie zmieniło.

Powtórzę się:

    cout <<"Drukuje" <<*wsk_przestepny <<endl; //błąd wyskakuje tutaj

wsk_przestepny ma nieustaloną wartość.

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