Program wywala

0

Witam.
Może mi ktoś powiedzieć, czemu program wywala po wpisaniu liczby niedodatniej?

#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
   try
   {
      int wiek;
      
      cout << "Powiedz ile masz lat: ";
      cin >> wiek;
      if(wiek <= 0)
      {
         string wiad = "Nie mozesz miec mniej niz 0 lat!";
         throw wiad;
      }
      cout << "Masz " << wiek << " lat" << endl;
   }

   catch(char wiado)
   {
      cout << wiado;
   }
   
   system("pause");
   return 0;
}
1

catch(string wiado)

0

Teraz mi nie kompiluje. Co może być przyczyną?

Oraz dodatkowe pytanie. Te catche i throwy działają tak dość prymitywnie, tzn catch łapie tego throwa co jest w try tuż nad nim, prawda? Nie ważne jaka nazwa zmiennej będzie? Czy ma być taka sama jak ta throwowana?

W devie działa, w Visualu nie...

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)
1>          d:\programy\microsoft visual studio 11.0\vc\include\ostream(695): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' 
// zad11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	try
	{
		int wiek;
		
		cout << "Powiedz ile masz lat: ";
		cin >> wiek;
		if(wiek <= 0)
		{
			string wiad = "Nie mozesz miec tyle lat!";
			throw wiad;
		}
		cout << "Masz " << wiek << " lat" << endl;
	}

	catch(string wiado)
	{
		cout << wiado << endl;
	}
	
	

	system("pause");
	return 0;
} 
1
_13th_Dragon napisał(a)

Jest poprawnie
Nie jest

i powinno się kompilować i poprawnie działać
Nie musi

Endrju napisał(a)

Kod działa:
Nie działa ;-)

string wiad = "Nie mozesz miec tyle lat!";

Używasz typu string a brakuje #include <string>.

I tak, to jest przyczyną błędu.

0

Możecie mi powiedzieć jak zapisać warunek w IF, że jeżeli jakaś zmienna A nie będzie liczbą to coś się stanie?

ok, wpadłem na to
if(isdigit(zmienna))

Jednak IF zwróci prawdę gdy zmienna będzie liczbą. Ale jak zrobić aby zwróciła wtedy fałsz?

0

if(cin>>wiek) // ok

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