ubuntuusers.de

Dialogprogramm mit "If" wie beende ich einen Zweig

Status: Ungelöst | Ubuntu-Version: Ubuntu 17.10 (Artful Aardvark)
Antworten |

JimboJuiZe

Anmeldungsdatum:
4. November 2017

Beiträge: Zähle...

Moin meine Damen und Herren, habe gerade mein Studium begonnen, war eine Woche schwer krank und hänge jetzt schon so hinterher das ich nun nach stundenlanger Arbeit mit den ersten Aufgaben schon nicht mehr zurecht komme.

Hier mein Problem es geht um Aufabe B-7 aus folgendem Aufgabenblatt.

 https://drive.google.com/file/d/1W3lIywrWM4uGC9YzyT6Oi32JB_BxYdEL/view?usp=sharing 

hier mein Quelltext mit Problembeschreibung als Kommentar:

#include <stdio.h>

// C-Programm welches einen Dialog führt.

int main(void)

{	
	int zahl;
	
	{
	printf("Programmierst du? (0: nein, 1: ja) ");
	scanf("%d", &zahl);
		
		{					
		if (zahl == 0)
		printf("Achso, dann wirst du es aber bald lernen\n");
		'''// ich bekomme hier einfach kein Ende des Programms hin... ich denke/dachte mit den geschweiften Klammern sei 			   dies getan. Habe ausserdem den "break" Befehel entdeckt , jedoch    klappt dieser ebenfalls nicht.  Wenn ich nun 		   	   in der Shell wieder 0 oder 1 eingeben läuft das Programm weiter. Bei allen andere Eingaben beendet sich das 			   Programm'''. 
		}

	if (zahl == 1)		
	printf("Gratuliere du bist ein Programmierer! Wirst du dafür auch bezahlt? (0: nein, 1: ja)\n");
				
				
		
	
			
		
				
	scanf("%d", &zahl);
	if (zahl == 0)
	printf("Trotzdem cool, du bist immerhin ein semi stabiler Programmierer ohne Padda\n");
		
	if (zahl == 1)
	printf("Ein professioneller Programmierer besitzt diese Stabilität\n");
		
		
	}
	
		
		return 0;
		

}
	

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Du kannst das Program in der main() Funktion mit return beenden (wie es im letzten Statement ja schon passiert) - da die main-Funktion so deklariert ist, dass sie einen int zurückgibt (der den Exit-Code des Programms darstellt) also z.B. return 0 für eine erfolgreiche Beendigung des Programms und etwas anders im Fehlerfall (üblicherweise 1, wenn man verschiedene Gründe für einen Abbruch differenzieren will, kann man sich da aber auch mit anderen Werten austoben). Das Ganze wird in dem Fall aber überflüssig, wenn man else if nutzt, um zu verhindern, dass überflüssige if-Abfragen überhaupt ausgeführt werden (vgl. z.B. http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/008_c_kontrollstrukturen_002.htm#mj0f86e59ac79ab24ec2b2605bbec95302):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

// C-Programm welches einen Dialog führt.

int main(void)
{	
   int zahl;
   printf("Programmierst du? (0: nein, 1: ja) ");
   scanf("%d", &zahl);

   if (zahl == 0) {
      printf("Achso, dann wirst du es aber bald lernen\n");
   } else if (zahl == 1) {
      printf("Gratuliere du bist ein Programmierer! Wirst du dafür auch bezahlt? (0: nein, 1: ja)\n");
      scanf("%d", &zahl);

      if (zahl == 0) {
         printf("Trotzdem cool, du bist immerhin ein semi stabiler Programmierer ohne Padda\n");
      } else if (zahl == 1) {
         printf("Ein professioneller Programmierer besitzt diese Stabilität\n");	
      }
   }
   return 0;
}

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4686

Wohnort: Berlin

@JimboJuiZe: Die geschweiften Klammern sind bei Dir ziemlich falsch gesetzt. Das ist von der Syntax her legal an diesen Stellen einen zusätzlichen ”Scope” durch geschweifte Klammern zu erstellen, macht aber gar keinen Sinn.

Man setzt die geschweiften Klammern um die Anweisung oder die Anweisungen (mehrzahl) die zum jeweiligen if oder else gehören, um daraus eine Verbundanweisung zu machen. Das ist zwar nicht notwendig wenn es nur eine Anweisung ist, die zu dem jeweiligen if oder else gehört, aber gerade bei einem Anfänger würde ich raten die geschweiften Klammern grundsätzlich zu verwenden und das auch mit der richtigen Einrückung, damit man als Leser nicht durcheinander kommt. Also so wie seahawk1986 das in seinem Beitrag gezeigt hat.

Du solltest Dir auch möglichst von Anfang an sinnvolle Namen angewöhnen. zahl ist beispielsweise sehr generisch und nichtssagend. Das es eine Zahl ist kann man der Stelle wo es als int deklariert wurde schon ablesen. Den Leser interessiert dann ja eher was diese Zahl bedeutet. antwort wäre da beispielsweise aussagekräftiger.

Auf dem Aufgabenblatt ist ein Beispiel für den Aufruf vom gcc: Da würde ich grundsätzlich noch die Optionen -Wall und -Wextra und eventuell noch -O3 ergänzen. Dann gibt der Compiler mehr Warnungen aus, denen man nachgehen sollte wenn sie kommen.

In der Aufgabe steht nichts von Fehlerbehandlung, also was beispielsweise passieren soll wenn der Benutzer etwas anderes als 0 oder 1 eingibt. Da kannst/solltest Du Dir aber vielleicht trotzdem Gedanken drüber machen, denn Benutzer halten sich gerne mal nicht an das was sie tun dürfen. Was passiert wenn der Benutzer einfach die Eingabetaste drückt? Eine andere Zahl als 0 oder 1 eingibt? Oder gar keine Zahl, sondern irgendwelche Buchstaben? Welchen Wert hat zahl (oder antwort) dann jeweils?

Antworten |