PROBLEM c++(program przestaje działać)

0

WItam mam problem z programem, ma on wczytywac z ekranu data urodzenai uzytkownika a nastepnie w odpowiedzi podac odpowiedni znak zodiaku. Kompilator nie wychwyca mi błędów natomiast program po wpisaniu daty samoczynnie przestaje działać...

#include <iostream>
#include <cstdio>

#include <cstring>

using namespace std;
int i;
int d_ur;
char* m_ur;

struct zodiak //definiuje strukturę danych o znakach zodiaku
  {
    int dzien;
    char mies[13];
    char znak[11];  
	}; 
    
	zodiak data[12] = 
{
	23, "grudnia",  	 "koziorozca",
	20, "stycznia", 	 "wodnika",
	20, "lutego",  		 "ryb", /* od 20 lutego do 20 marca */
	21, "marca",   		 "barana",
	20, "kwietnia",	     "byka",
	21, "maja",     	 "blizniet",
	21, "czerwca",	     "raka",
	22, "lipca",   		 "lwa",
	23, "sierpnia",		 "panny",
	23, "wrzesnia",	     "wagi",
	23, "pazdziernika",  "skorpiona",
	22, "listopada",	 "strzelca"
};



string porownaj()
	{
	while(strcmp(data[i].mies, m_ur) && i++ < 11){}
        if(i<12)
            {
                cout<<"TWOIM ZNAKIEM JEST ";
				if(d_ur >= data[i].dzien) i = (i+1)%12;
                cin>>data[i].znak; 
            }
        else
            cout<<"$$$ ZLE WPISALES MIESIAC $$$";            
 
        return 0;
    }
	
	
	int main()
	{
		cout <<"podaj dzien urodzenia: ";
		cin>>d_ur;
		cout<<"podaj miesiac urodzenia (np. marca): ";
		cin>>m_ur;
		porownaj();
		return 0;
	} 
0

Dlaczego używasz zmiennych globalnych? Dlaczego funkcja porownaj zwraca string a jest return 0;? Dlaczego do wskaźnika próbujesz wczytać napis? Dlaczego do obsługi napisów nie użyjesz std::string?

Najważniejszym błędem jest ten ostatni - nie można tak wczytać tekstu. Albo użyj zmiennej typu std::string albo statycznego bufora czyli char[MAX_ZNAKOW] ale to wymaga dodatkowych zabezpieczeń.

Np.

  std::string napis;
  
  std::cin >> napis;

http://ideone.com/rfkEGZ

0

Sprawdź najpierw na co wskazuje m_ur, bo z kodu wynika że wskazuje ono na jakieś puste miejsce w <s>przestrzeni</s> pamięci.
Poza tym zmienne globalne są złe :/ nie lepiej zadeklarować te zmienne w funkcji main i przekazać je jako parametr do funkcji porownaj?

edit
Wyprzedziłeś mnie o 8 sekund :/

0

moj wykładowca obcina mi punkty o polowe jeżeli nie deklaruje jak największej ilości zmiennych jako globalne , a uwagi zaraz uwzględnie ;)

0

std::cout<<"podaj miesiac urodzenia (np. marca)";
std::cin >> m_ur;
zmieniłem tak jak radziłeś Endrju lecz nie poskutkowało i tak wyrzuca komunikat "program przestał działać" zaraz po tym jak wpisze miesiąc urodzenia;/

0

Ktoś ma pomysł dlaczego wyskakuje mi taki komunikat?

0
#include <iostream>
#include <cstdio>
#include <cstring>
#include<string>
#include<cstdlib> 

using namespace std;
int i;
int d_ur;
char* m_ur;

struct zodiak //definiuje strukturę danych o znakach zodiaku
  {
    int dzien;
    char mies[13];
    char znak[11];  
	}; 
    
	zodiak data[12] = 
{
	23, "grudnia",  	 "koziorozca",
	20, "stycznia", 	 "wodnika",
	20, "lutego",  		 "ryb", /* od 20 lutego do 20 marca */
	21, "marca",   		 "barana",
	20, "kwietnia",	     "byka",
	21, "maja",     	 "blizniet",
	21, "czerwca",	     "raka",
	22, "lipca",   		 "lwa",
	23, "sierpnia",		 "panny",
	23, "wrzesnia",	     "wagi",
	23, "pazdziernika",  "skorpiona",
	22, "listopada",	 "strzelca"
};



string porownaj()
	{
	i=3;
	while(strcmp(data[i].mies, m_ur) && i++ < 12){}
        if(i<12)
            {
                cout<<"TWOIM ZNAKIEM JEST ";
				if(d_ur >= data[i].dzien) i = (i+1)%12;
                cin>>data[i].znak; 
            }
        else
            cout<<"$$$ ZLE WPISALES MIESIAC $$$";            
 
        system("pause")
    }
	
	
	int main()
	{
		
		cout <<"podaj dzien urodzenia: ";
		cin>>d_ur;
	    std::cout<<"podaj miesiac urodzenia (np. marca)";
		std::cin >> m_ur;
		porownaj();
		return 0;
	}
0

już dostałeś odpowiedź ale czytasz niedokładnie.

na co wskazuję zmienna m_ur?

0
adek93 napisał(a):

nie rozumiem Ciętu masz rację.
Aby rozumieć trzeba jakieś podstawy łyknąć.

char m_ur[13];
...
cin >> setw(12) >> m_ur; // potrzebne <iomanip>

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