Seite 1 von 1

Dialog in C / viele Entscheidungen nacheinander

Verfasst: Fr Mai 11, 2018 9:01 pm
von Gerowia
Hallo ;),
Ich muss ein C-Programm schreiben, das nacheinander ja/nein Entscheidungen des Benutzers verlangt um herauszufinden, welches Raumschiff aus Star Wars/Star Treck gemeint ist. Es sind also viele ineinander verschachtelte Fragen. Ich habe versucht dies mit vielen if anweisungen zu realisieren, allerdings wird ab der 3. Eingabe einfach die nächste if-Anweisung ausgespuckt, auch wenn diese übersprungen werden müsste..

Code: Alles auswählen

#include<stdio.h>

int main(void)
{
	int a,b,c,d,e,f,g; 
	
	printf("Ich bin ein Raumschiff. \n Aus welchem Universum stamme ich? (0: Star Trek, 1: Star Wars) : ");
	scanf("%d", &a);
	if(a==0){
		printf("Gehoere ich zu Star fleet?(0:ja , 1: nein) : ");
		scanf("%d",&b);
	}else {
		if(a==1){
			printf("Zu wem gehoere ich?(0: Imperium, 1: Rebellen) : ");
			scanf("%d", &d);
		}
		  }
	if(b==0){
		printf("Bin ich im Delta Quadrant? (0:ja, 1:nein) : ");
		scanf("%d", &c);
	}else{
		if(b==1){
			printf("Bin ich klingonisch? (0: ja, 1: nein) :");
			scanf("%d",&g);
		}
	}
	if(c==0){
		printf("Ich bin die USS Voyager.");
	}else{
			if(c==1){
				printf("Ich bin die USS Enterprise.");
			}
		 }
	if(g==0){
		printf("Ich bin ein Bird-of-Prey.");
	}else{
		if(g==1){
		     printf("Ich bin ein Borg Cube.");
			}
		}
	if(d==0){
		printf("Bin ich rund? (0:ja, 1: nein) : ");
		scanf("%d",&e);
	}else{
		if(d==1){
			printf("Habe ich einen Pilotensitz? (0: ja, 1: nein) :");
			scanf("%d", &f);
		}
	}
	if(e==0){
		printf("Ich bin der Death Star.");
	}else{
		if(e==1){
			printf("Ich bin ein Tie Fighter.");
		}
	}
	if(f==0){
		printf("Ich bin ein X-Wing.");		
	}else{
		if(f==1){
			printf("Ich bin der Millenium Falcon.");
		}
	}
	
	
	
	return 0;
}
Wie kann man das realisieren? Gibt es eine Alternative zu so vielen if -Anweisungen? Und warum funktioniert es nicht? :?

Re: Dialog in C / viele Entscheidungen nacheinander

Verfasst: Fr Mai 11, 2018 9:17 pm
von cloidnerux
Die "sinnvolle" Lösung für so ein Problem wären Baumstrukturen, bzw im allgemeinen Datenstrukturen.

Aus deiner Formulierung entnehme ich aber, dass es sich hierbei um eine Hausaufgabe handelt, die sich an gewissen Rahmenbedingungen orientiert.

Dein Code Funktioniert nicht, weil du entweder deine Klammern nicht richtig gesetzt hast, bzw die vorher getroffenen Entscheidungen ignorierst:

Code: Alles auswählen

if(a==0){
  printf("Gehoere ich zu Star fleet?(0:ja , 1: nein) : ");
  scanf("%d",&b);
}else {
  if(a==1){
	 printf("Zu wem gehoere ich?(0: Imperium, 1: Rebellen) : ");
	 scanf("%d", &d);
  }
}
if(b==0){
  printf("Bin ich im Delta Quadrant? (0:ja, 1:nein) : ");
  scanf("%d", &c);
}else{
  if(b==1){
	 printf("Bin ich klingonisch? (0: ja, 1: nein) :");
	 scanf("%d",&g);
  }
}
In diesem Codeabschnitt ignorierst du nach dem ersten if(a==0) im weiteren die getroffene Entscheidung. Ich entscheide mich also für Star Wars und werde dann aber gefragt, ob ich im Delte Quadrant bin.

Re: Dialog in C / viele Entscheidungen nacheinander

Verfasst: Fr Mai 11, 2018 9:36 pm
von Gerowia
Ich verstehe , aber bei so vielen möglichkeiten gibt es ja keine Reihenfolge, die ich logisch nacheinander ablaufen könnte.
Die Entscheidungen sollen immer mit 0 für nein und 1 für ja getroffen werden, ansonsten gibt es keine Vorgaben. Allerdings sind wir im Skript gerade Mal bei Schleifen und if bzw switch, also weeeiiit von Datenstrukturen und Bäumen entfernt, weshalb ich mich ernsthaft frage wie man das mit diesen Kenntnissen realisieren soll. :(
Ich hatte die Hoffnung , dass nicht initialisierte Variablen und damit auch diese betreffende if-Anweisungen übersprungen werden würden :?

Re: Dialog in C / viele Entscheidungen nacheinander

Verfasst: Fr Mai 11, 2018 9:48 pm
von cloidnerux
Ich hatte die Hoffnung , dass nicht initialisierte Variablen und damit auch diese betreffende if-Anweisungen übersprungen werden würden :?
Beim Programmieren ist es immer wichtig zu verstehen, dass der Computer exakt das macht, was du Progammiert hast, nicht das was du möchtest.
Nicht initalisierte Variablen haben in C halt keinen Sonderstatus, ist gibt keine Möglichkeit abzufragen, ob eine Variable initalisiert wurde(wobei es Compilerwarnungen gibt).
Du kannst aber alle Variablen mit -1 initialisieren und das als "nicht Initalisiert" Flag nutzen.
Ich verstehe , aber bei so vielen möglichkeiten gibt es ja keine Reihenfolge, die ich logisch nacheinander ablaufen könnte.
Wenn alle Reinfolgen nicht geeignet sind, dann sind sie zwangsläufig alle geeignet, weil sie ja dann alle gleich schlecht sind. Aber aus deiner Aussage entnehme ich, dass dieser Weg für die jetzige Aufgabe wenig Sinnvoll ist.
Die Entscheidungen sollen immer mit 0 für nein und 1 für ja getroffen werden, ansonsten gibt es keine Vorgaben. Allerdings sind wir im Skript gerade Mal bei Schleifen und if bzw switch, also weeeiiit von Datenstrukturen und Bäumen entfernt, weshalb ich mich ernsthaft frage wie man das mit diesen Kenntnissen realisieren soll.
Ich Zähle Insgesamt 8 Möglichkeiten, dass ist jetzt nicht so viel. Die einfachste Lösung für dich ist es, die if-Abfragen zu verschachteln. Am besten malst du dir einmal den Ablaufgraphen auf ein Blatt Papier, dann dürfte es recht einfach werden, es zu verstehen.

Re: Dialog in C / viele Entscheidungen nacheinander

Verfasst: Fr Mai 11, 2018 10:00 pm
von Gerowia
Danke, ich habe alle Variablen zu Beginn =-1 gesetzt, jetzt funktioniert es ;)

Re: Dialog in C / viele Entscheidungen nacheinander

Verfasst: Sa Mai 12, 2018 10:21 pm
von Xin
Gerowia hat geschrieben:Danke, ich habe alle Variablen zu Beginn =-1 gesetzt, jetzt funktioniert es ;)
Und bist Du Dir bewusst, weshalb?