pippo
2004-10-23, 19:23:59
Habe folgendes Programm geschrieben:
// Uebungsblatt 3
//
#include <iostream>
using namespace std;
short int Aufgabe, a=1, Jahr, Zahl;
char Buchstabe;
int main()
{
cout<<"Informatik I: Uebungsblatt 3\n1 - Schaltjahrueberpruefung\n2 - Art eines Buchstabens"<<endl;
cout<<"\n\nWaehlen sie die Aufgabe: "; //Auswahl der Aufgabe
cin>>Aufgabe;
switch (Aufgabe)
{
case 1: //Beginn Aufgabe 1
{
cout<<"\nGeben sie das Jahr ein: ";
cin>>Jahr;
if(Jahr%4==0)
if(Jahr%100==0&&Jahr%400!=0)
cout<<Jahr<<" ist kein Schaltjahr!\n"<<endl;
else
cout<<Jahr<<" ist ein Schaltjahr!\n"<<endl;
};
break;
case 2: //Beginn Aufgabe 2
{
cout<<"\n\nGeben sie den Buchstaben ein: ";
cin>>Buchstabe;
while(a)
{
Zahl=Buchstabe;
if(Zahl>65&&Zahl<91||Zahl>96&&Zahl<123)
{
if(Zahl==65||Zahl==69||Zahl==73||Zahl==79||Zahl==85||Zahl==97||Zahl==101||Zahl== 105||Zahl==111||Zahl==117) //Vokale
cout<<"Es handelt sich um einen Vokal!\n"<<endl;
else
cout<<"Es handelt sich um einen Konsonanten!\n"<<endl;
a--;
}
else
{
if(Zahl==-102||Zahl==-103||Zahl==-108||Zahl==-114||Zahl==-124||Zahl==-127) //Umlaute
{
cout<<"Es handelt sich um einen Umlaut!\n"<<endl;
a--;
}
else
{
cout<<"Falsche Eingabe, bitte wiederholen sie: ";
cin>>Buchstabe;
}
}
}
};
break;
default: //Ausgabe für eine falsche Auswahl der Aufgabe
{
while(a)
{
if(Aufgabe==1 || Aufgabe==2)
a--;
else
{
cout<<"Falsche Eingabe, bitte wiederholen sie: ";
cin>>Aufgabe;
}
} }
}
return 0;
}
Es sind 2 Programme in einem und mein Problem liegt im 2., genauer gesagt im Dick markierten Bereich. Jedesmal wenn ich etwas eingebe, was ausserhalb des Bereichs von "short int" ist ( einen Buchstaben oder eine große Zahl ), geht des Programm in eine Endlosschleife und spuckt immer das letzte cout aus. Wie könnte ich das ändern?
Edit: Hier noch was der Debugger ausspuckt:
'Uebung3.exe': Loaded 'C:\Dokumente und Einstellungen\Chef\Eigene Dateien\Visual Studio Projects\Uebung3\Debug\Uebung3.exe', Symbols loaded.
'Uebung3.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', No symbols loaded.
'Uebung3.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', No symbols loaded.
The thread 'Win32 Thread' (0xdac) has exited with code -1073741510 (0xc000013a).
The program '[3736] Uebung3.exe: Native' has exited with code 0 (0x0).
// Uebungsblatt 3
//
#include <iostream>
using namespace std;
short int Aufgabe, a=1, Jahr, Zahl;
char Buchstabe;
int main()
{
cout<<"Informatik I: Uebungsblatt 3\n1 - Schaltjahrueberpruefung\n2 - Art eines Buchstabens"<<endl;
cout<<"\n\nWaehlen sie die Aufgabe: "; //Auswahl der Aufgabe
cin>>Aufgabe;
switch (Aufgabe)
{
case 1: //Beginn Aufgabe 1
{
cout<<"\nGeben sie das Jahr ein: ";
cin>>Jahr;
if(Jahr%4==0)
if(Jahr%100==0&&Jahr%400!=0)
cout<<Jahr<<" ist kein Schaltjahr!\n"<<endl;
else
cout<<Jahr<<" ist ein Schaltjahr!\n"<<endl;
};
break;
case 2: //Beginn Aufgabe 2
{
cout<<"\n\nGeben sie den Buchstaben ein: ";
cin>>Buchstabe;
while(a)
{
Zahl=Buchstabe;
if(Zahl>65&&Zahl<91||Zahl>96&&Zahl<123)
{
if(Zahl==65||Zahl==69||Zahl==73||Zahl==79||Zahl==85||Zahl==97||Zahl==101||Zahl== 105||Zahl==111||Zahl==117) //Vokale
cout<<"Es handelt sich um einen Vokal!\n"<<endl;
else
cout<<"Es handelt sich um einen Konsonanten!\n"<<endl;
a--;
}
else
{
if(Zahl==-102||Zahl==-103||Zahl==-108||Zahl==-114||Zahl==-124||Zahl==-127) //Umlaute
{
cout<<"Es handelt sich um einen Umlaut!\n"<<endl;
a--;
}
else
{
cout<<"Falsche Eingabe, bitte wiederholen sie: ";
cin>>Buchstabe;
}
}
}
};
break;
default: //Ausgabe für eine falsche Auswahl der Aufgabe
{
while(a)
{
if(Aufgabe==1 || Aufgabe==2)
a--;
else
{
cout<<"Falsche Eingabe, bitte wiederholen sie: ";
cin>>Aufgabe;
}
} }
}
return 0;
}
Es sind 2 Programme in einem und mein Problem liegt im 2., genauer gesagt im Dick markierten Bereich. Jedesmal wenn ich etwas eingebe, was ausserhalb des Bereichs von "short int" ist ( einen Buchstaben oder eine große Zahl ), geht des Programm in eine Endlosschleife und spuckt immer das letzte cout aus. Wie könnte ich das ändern?
Edit: Hier noch was der Debugger ausspuckt:
'Uebung3.exe': Loaded 'C:\Dokumente und Einstellungen\Chef\Eigene Dateien\Visual Studio Projects\Uebung3\Debug\Uebung3.exe', Symbols loaded.
'Uebung3.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', No symbols loaded.
'Uebung3.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', No symbols loaded.
The thread 'Win32 Thread' (0xdac) has exited with code -1073741510 (0xc000013a).
The program '[3736] Uebung3.exe: Native' has exited with code 0 (0x0).