Frage von LebronJenkins, 66

Programmieren in C marken setzen?

Hi

Vor kurzem habe ich angefangen mich mit der Programmiersprache C auseinander zu setzten. Ich habe ein paar videos dazu geguckt , etwas rumprobiert und habe nun eine Frage. Mir wurde in einfaches Programm mit der switch Funktion gezeigt. Quellcode:

#include #include

int main() { int zahl1; printf ("Gib zahl ein"); scanf("%d", &zahl1);

switch (zahl1)
{
    case 1: printf("EINS"); break;
    case 2: printf("ZWEI"); break;
    case 3: printf("DREI"); break;
    default: printf("NICHTS"); break;

}


return 0;

}

Jetzt habe ich die Frage, wenn der Fall default eintrifft , wie kann ich eine Marke setzen , die den Benutzer dann wieder an den Anfang des Programms setzt , also zu '' Gib eine zahl ein ''.

Danke im Vorraus

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Belaro, 36

In deinem Beispiel würde ich eine Schleife verwenden. Es gibt in der Informatik 3 bekannte Schleifentypen: while, do-while & for

(Natürlich gibt es auch weitere Typen an Schleifen aber in C sind es die drei, soviel ich meine)

while:
while überprüft am Anfang einer Schleife, ob etwas true ist. Falls dies der Fall, macht er auch dann die Schleife. Falls die Schleife am Ende gekommen ist, geht es wieder nach oben und while überprüft wieder etwas, ob es true ist.

Beispiel:

int num = 0;


//solange num nicht gleich 2
while(num != 2) {  
 printf("Ich bin in der while-Schleife!");
 num = num + 1;
}

printf("Ich bin nicht mehr in der while-Schleife!");

Output:

Ich bin in der while-Schleife!
Ich bin in der while-Schleife!
Ich bin nicht mehr in der while-Schleife!


do-while:
do-while ist genau gleich wie while, nur hier wird am Anfang etwas ausgeführt. Ganz egal, was überprüft wird, die Schleife geht sicher einmal durch. Am Ende wird dann überprüft, ob etwas true ist. Falls das der Fall wäre, fängt es wieder von vorne an.

Beispiel:

int num = 0;


do {
 printf("Ich bin in der do-while-Schleife!);
 num = num + 1;

} while(num != 2);

printf("Ich bin nicht mehr in der do-while-Schleife!);

//Die Schleife geht nun sicher einmal durch, bevor es //am Ende auf while antrifft und dort etwas auf true  //überprüft wird

Output:

Ich bin in der do-while-Schleife!
Ich b
in in der do-while-Schleife! Ich bin nicht mehr in der do-while-Schleife!

Hier sieht man jetzt, dass es am Output nichts verändert hat. Jedoch gibt es Momente, da will man umbedingt, dass da etwas ausgeführt wird, egal ob es jetzt true oder false ist.


for:
for ist im Vergleich zu while und do-while eine bequemere Variante, wenn es darum geht, eine bestimmte Anzahl an Wiederholungen zu machen. In einer for Schleife kann man nicht nur etwas auf true und false überprüfen, sondern auch einer Variable einen Wert setzen und bestimmen, welche Variable um wie viel addiert, subtrahiert, multipliziert.. etc.
Beispiel:
int num;

for(num = 0; num != 2; num = num + 1) {
 printf("Ich bin in der for-Schleife!");

}

printf("Ich bin nicht mehr in der for-Schleife!");

Output:

Ich bin in der for-Schleife!
Ich bin in der for-Schleife!
Ich bin nicht mehr in der for-Schleife!

Am Schluss sehen wir, dass bei allen unseren Programmen der Output identische ist. Dennoch haben die drei Scheifen verschiedene Eigenschaften, die man berücksichtigen muss. Bei while ist, dass der Wert am Anfang nur überprüft und es auch solange die Schleife macht, bis es false ist. Bei do-while, dass es erst am Ende nur überprüft wird. Bei for, dass man nebst dem Überprüfen auch Wert an Variablen setzen kann und die auch auf irgendeine Form addieren etc.

An deinem Programm würde ich dir eine while-Schleife setzen. Dann kann man, falls man in einer Case landen würde, den Wert so einstellen, dass es false ist für die Schleife und dein Programm hört auf.

Code:

int main(void) {
int num1, run = 1;

while(run == 1) {
 printf("Gib Zahl ein: ");
 scanf("%i", &num1);

 switch(num1) {
 
  case 1:
   printf("EINS");
   run = 0;
   break;
 
  case 2:
   printf("ZWEI");
   run = 0;
   break;
 
  case 3:
   printf("DREI");
   run = 0;
   break;

  default:
   printf("KEINE");
 }

}

System("pause");
return 0;

}

Natürlich sind auch andere Lösungen möglich!


Cheers

P.s. Bitte deklariere deine Variablen in Englisch. Das ist sozusagen eine Richtlinie, an die man in der ganzen Informatikwelt halten muss. Wenn man mal ein Programm in ein Land schickt, wo sie Deutsch nicht verstehen, wird es für sie Mühsam, den Code zu verstehen.

Kommentar von LebronJenkins ,

Danke für deine Erklärung, doch ich bekomme eine Fehlermeldung:

undefined reference of 'System' 

Hab wie gesagt gerade erst mit C angefangen. Weiß mir also nicht anders zu helfen , als dich nochmal zu fragen.

#include <stdio.h>

#include<stdlib.h>

int main(void) {

int num1, run = 1;

while(run == 1) {
printf("Gib Zahl ein: ");
scanf("%i", &num1);

switch(num1) {

case 1:
printf("EINS");
run = 0;
break;

case 2:
printf("ZWEI");
run = 0;
break;

case 3:
printf("DREI");
run = 0;
break;

default:
printf("KEINE");
}

}

System("pause");
return 0;

}
Kommentar von Belaro ,

Ja hab den Fehler wahrscheinlich auch schon gefunden.

Ersetze:

System("pause");

mit:

system("pause");
Kommentar von mememememe ,

Nur weils hier scheinbar noch nicht steht:

Man kann das mit einer Marke und goto errreichen, es empfiehlt sich aber praktisch nie, Sprungbefehle einzusetzen (von verhaltenen switch-Anweisungen etc. mal abgesehen).
Schleifen sind immer zu bevorzugen.

Antwort
von PeterKremsner, 29

Du kannst das alles in eine do while Schleife setzen. Dann kannst du dir mit einem char eine Marke setzen, zB InvalidInput.

Initialisiert wird sie mit 0.

Bei den Switch Anweisungen setzt du die Marke, 0 wenn die Eingabe gepasst hat, oder im default auf 1.

Die Schleife läuft dann so lange bis eine gültige Zahl eingeben wurde.

Alternativ dazu kannst du vor die switch Anweisung:

beforeswitch:

schreiben und im default sagst du dann goto(beforeswitch).

Pass aber mit der goto Anweisung auf, wenn du sie gut umgehen kannst dann umgehe sie, sonst kann der Code ziemlich unleserlich werden. Zudem ist die goto Anweisung ziemlich verpöhnt und wenn du so etwas in einem C Forum postest kommt des öfteren mal ein kleiner Shitstorm dabei raus.

Antwort
von ItsJustMe38, 16

Je nach Anwendung kann man es auch rekursiv lösen, in dem man den Code in eine separate Funktion auslagert, die bei default einfach nochmal aufgerufen wird.

Natürlich könntest du auch die Main() in diesem einfachen Fall nochmal aufrufen, wäre aber eher "unschön"

Kommentar von ReiInDerTube123 ,

Nö wäre nicht unschön

Antwort
von ReiInDerTube123, 10

Also das von Belaro ist möglich, ist aber eigentlich viel einfacher zu lösen.

Dazu musst du in "main" einfach "main" nochmal auffrufen! Ja das geht sogar!

Also wäre bei default dann:

default: printf("NICHTS"); main();
Antwort
von Humblin, 29

Setze dein printf und scanf in eine do while Schleife 

Do{

printf();

scanf();

}while(zahl1 != 1 && zahl1 != 2 && zahl1 != 3); 

Switch(zahl1)

....

Dann kannst du den default weglassen, da er sicher nicht mehr auftritt.

Keine passende Antwort gefunden?

Fragen Sie die Community