Goto Frage

cctnt

Erfahrenes Mitglied
Tag

Ich beschäftige mich im moment mit Goto und der verwendung.

Meine Frage/Problem besteht darin, das ich einen console Basierenden Rechner bastle aber die exit function nicht richtig funktioniert.

Es klappt zwar schon Wunderbar das der Rechner alle Zahlen erkennt die nicht zur auswahl stehen, allerdings, so bald ich einen buchstaben oder sonderzeichen eingebe, wird die schleife ohne unterbrechung durchlaufen.

Hier mal der code:
PHP:
		int valuea = 0;
selection:
		cout << "Do you want to continue" << endl;
		cout << "Yes = 1"				  << endl;
		cout << "No = 2"				  << endl;
		cout << "Choice ="				  << endl;
		cin >> valuea;


		if (valuea == 1)
		{
			goto start;
		}
		else if (valuea == 2)
		{
			return  0;
		}
		else if (valuea < 1 || valuea > 2)
		{
			cout << "Wrong Choice. Choose again." << endl;
			goto selection;
		}
		return 0;

Jegliche Verbesserungsvorschläge sind Willkommen.
 
moin


Goto ist das schlimmste was du als C/C++ programmierer machen kannst!
Du solltest dich nciht damit beschäftigen wie man Goto verwenden kann, sonder wie man es vermeiden kann.


mfg
umbrasaxum
 
1. zu den problem mit den zahlen
die sandardeingaben wie "cin" oder "scanf" sind im bezug auf falsche eingaben sehr empfindlich um das programm möglichst stabil zu halten ist es am besten sich diese selber durch einlesen einzelner zeichen zu programiren zb. mit "getch" die auswertung ist zwar ein bischen arbeit aber funktioniet dann.


2. wegen dem goto wolte ich noch fragen ob es andere möglichkeiten gibt aus mehrfachschleifen auszusteigen (wahnwirzige if konstruktionen ausgeschlossen, möglichst einfach)
 
zusätzliche anmärkung

hab leider forher nicht so gut hingesehen aber ich hätte dier bei einstelligen zahlen was anderes empfoseln

switch(getch())
{
case '1': ________break;
case '2':_________break;
default: cout<<falsche eingabe;
}
 
moin


2. wegen dem goto wolte ich noch fragen ob es andere möglichkeiten gibt aus mehrfachschleifen auszusteigen (wahnwirzige if konstruktionen ausgeschlossen, möglichst einfach)

Hmm, das ist eine berächtigte Frage. Bei wirklich (wirklich ist relativ...) tief vertschachtelte Schleifen ist das schon gerechtfertigt, aber ich bin bis jetzt immer drum rum gekommen Schleifen tief zu verschachtel, denn es gibt ja auch noch Funktionen...


Hier ist ein Tutorials: http://www.tutorials.de/tutorials182516.html
Ich finde es zwar nciht so toll, zeigt aber wie man den Programmablauf mit Schleifen bewerkställigt.
 
Konsumierer hat gesagt.:
FULL ACK!

Bei mir in der Firma ist es nach Programmierrichtlinien sogar strengstens verboten goto zu benutzen.

mag ja sein

aber ich bin eben noch anfänger und will mir eben alles aneignen was möglich is

will ja mal c++ können ned nur wissen was es ist

wie funktioniert das mit getch() genau?
 
die Funktion "getch" list ein Zeichen der Tastertur und gibt deren ASCI Kod zurück
das ligt bei zahlen im bereich von gut 48
Um dier die sucherei in ner ASCI tabelle zu ersparen kanste das mit den hochkommern machen.
Allerdings fälld dann das betätigen der Return Taste weg.

wenn du switch noch nicht kenst kanst du es auch mit den if machen dann speicherst due das eingegebene zeichen einfach zb. x=getch();
 
PHP:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main ()
{
	int x, eingabe;
	while(1)
	{
		start:
		system("cls");
		printf("\n\n\tGeben Sie eine Zahl ein.  ");
		scanf("%i", &x);
		printf("\n\n\tDie Zahl die Sie eingegeben haben ist %i", x);
		getch();
		while(1)
		{
			system("cls");
			printf("\n\n\tMoechten Sie weiter machen\n\n\t1 fuer Ja \t2 fuer Nein\n\n\t");
			eingabe=getch();
			switch(eingabe)
			{
			case'1':
				goto start;
			case'2':
				return 0;
			default:
				printf("Falsche Taste");
				getch();
			}
		}
	}
	return 0;
}

Probieren
Habs auch mit goto gemacht.
 
moin


Viel besser wäre es so:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main ()
{
    int x, eingabe;
    while(1)
    {
        system("cls");
        printf("\n\n\tGeben Sie eine Zahl ein.  ");
        scanf("%i", &x);
        printf("\n\n\tDie Zahl die Sie eingegeben haben ist %i", x);
        getch();
        while(1)
        {
            system("cls");
            printf("\n\n\tMoechten Sie weiter machen\n\n\t1 fuer Ja \t2 fuer Nein\n\n\t");
            eingabe=getch();
            switch(eingabe)
            {
            case'1':
                break;
            case'2':
                return 0;
            default:
                printf("Falsche Taste");
                getch();
            }
        }
    }
    return 0;
}
 
Zurück