Dialog in C / viele Entscheidungen nacheinander

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Gerowia
Beiträge: 14
Registriert: Di Jan 03, 2017 10:38 am

Dialog in C / viele Entscheidungen nacheinander

Beitrag von Gerowia » Fr Mai 11, 2018 9:01 pm

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? :?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3076
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Dialog in C / viele Entscheidungen nacheinander

Beitrag von cloidnerux » Fr Mai 11, 2018 9:17 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Gerowia
Beiträge: 14
Registriert: Di Jan 03, 2017 10:38 am

Re: Dialog in C / viele Entscheidungen nacheinander

Beitrag von Gerowia » Fr Mai 11, 2018 9:36 pm

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 :?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3076
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Dialog in C / viele Entscheidungen nacheinander

Beitrag von cloidnerux » Fr Mai 11, 2018 9:48 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Gerowia
Beiträge: 14
Registriert: Di Jan 03, 2017 10:38 am

Re: Dialog in C / viele Entscheidungen nacheinander

Beitrag von Gerowia » Fr Mai 11, 2018 10:00 pm

Danke, ich habe alle Variablen zu Beginn =-1 gesetzt, jetzt funktioniert es ;)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8456
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Dialog in C / viele Entscheidungen nacheinander

Beitrag von Xin » Sa Mai 12, 2018 10:21 pm

Gerowia hat geschrieben:Danke, ich habe alle Variablen zu Beginn =-1 gesetzt, jetzt funktioniert es ;)
Und bist Du Dir bewusst, weshalb?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten