# Code von vorne starten

• Hallo Leute,

ich hab folgenden Code schon fertig und wollte nur noch hinzufügen, dass der Code immer wieder von vorne anfängt.
Meine Idee wäre goto zu benutzen, jedoch habe ich erfahren, dass man diesen Befehl ungern benutzt.
Ich hoffe ihr könnt mir weiterhelfen :).

#include <stdio.h>

int main(int argc, const char * argv[]) {
char go [30];
float conversion_miles;
float conversion_foot;
float conversion_inches;
float conversion_kg;
float conversion_metre;
int choice;
int x;

``````printf("Welcome to Unit converter !\n");
printf("Press any button to continue:\n\n");
scanf("%c",&go[30]);

printf("Choose which unit you want to convert:\n");
printf("1.  km to miles\n2.  inches to foot\n3.  cms to inches\n4.  pound to kg\n5.  inches to metre\n");
scanf("%d",&choice);
switch(choice){
case 1:
printf("You chose km to miles !\n");
printf("How much kilometers you want to convert in miles?\n");
scanf("%f",&conversion_miles);
printf("%.2f kilometers are %.3f miles \n",conversion_miles,conversion_miles*0.621371);
break;

case 2:
printf("You chose inches to foot\n");
printf("How much inches you want to convert in foot?\n");
scanf("%f",&conversion_foot);
printf(" %.2f inches are %.3f foot\n",conversion_foot,conversion_foot*0.0833333 );
break;

case 3: printf("You chose cm to inches\n");
printf("How much cm you want to convert in inches?\n");
scanf("%f",&conversion_inches);
printf(" %.2f cm are %.3f inches\n",conversion_inches,conversion_inches*0.393701 );
break;

case 4: printf("You chose pound to kg\n");
printf("How much pound you want to convert in kg?\n");
scanf("%f",&conversion_kg);
printf(" %.2f pound are %.3f kg\n",conversion_kg,conversion_kg*0.453592);
break;

case 5: printf("You chose inches to metre\n");
printf("How much pound you want to convert in kg?\n");
scanf("%f",&conversion_metre);
printf(" %.2f inches are %.3f metre\n",conversion_metre,conversion_metre*0.0254);
break;
``````

}

}

• Kennst du schon Schleifen?

• Ja, Schleifen kenn ich aber bin mir unsicher wie ich sie benutzen soll

• @JohannesK sagte in Code von vorne starten:

char go [30];

printf("Welcome to Unit converter !\n");
printf("Press any button to continue:\n\n");
scanf("%c",&go[30]);

1. Was soll der Nutzer da eingeben?
Im Allgemeinen wird die Eingabe nur nach dem drücken der Entertaste übernommen - das ist schon mal nicht jede beliebige Taste.

Wenn der Nutzer vorher eine andere Taste (die ein Zeichen liefert) drückt, passiert erstmal nichts - bis zum Enter .
Das Zeichen (ein Zeichen) wird eingelesen, das '\n' von der Entertaste bleibt aber noch, so wie alle anderen Tasten dazwischen.

Zudem ist so eine Eingabe äußerst nervig.

1. Dein Array go hat nur 30 Elemente. Der Index geht von 0 bis 29.
Mit go[30] sprichst du das Element mit dem Index 30 an - das existiert nicht.

• Zu 1.):
Ich wollte das der Nutzer eine Art Begrüßung bekommt wie bei einem Spiel. D.h wie bei. einem Spiel was man startet und dann den Benutzer auffordert eine beliebige Taste zu drücken um fortzufahren.
Ich hatte keine andere Idee als diese, deswegen habe ich es so probiert.
@DirkB Könntest du mir sagen eventuell wie ich das umändern sollte ?

Vielen Dank im Voraus

• @JohannesK sagte in Code von vorne starten:

Ja, Schleifen kenn ich aber bin mir unsicher wie ich sie benutzen soll

Schleife um den Teil, der wiederholt werden soll.

Eine fußgesteuerte Schleife, die auf einen bestimmten Wert von choice (z.B 0) reagiert wäre ok-

• @JohannesK sagte in Code von vorne starten:

@DirkB Könntest du mir sagen eventuell wie ich das umändern sollte ?

Lass es weg. Die Abfrage von Tastendrücken ist Betriebssystemabhängig.
Die Begrüßung kannst du lassen, die Abfrage kommt weg.

• Also wennn ich es richtig verstanden habe, dann würde der Code so aussehen

#include <stdio.h>

int main(int argc, const char * argv[]) {
float conversion_miles;
float conversion_foot;
float conversion_inches;
float conversion_kg;
float conversion_metre;
int choice;

``````do{
printf("\n\nWelcome to Unit converter !\n");
printf("Choose which unit you want to convert:\n");
printf("1.  km to miles\n2.  inches to foot\n3.  cms to inches\n4.  pound to kg\n5.  inches to metre\n");
scanf("%d",&choice);
switch(choice){
case 1:
printf("You chose km to miles !\n");
printf("How much kilometers you want to convert in miles?\n");
scanf("%f",&conversion_miles);
printf("%.2f kilometers are %.3f miles \n",conversion_miles,conversion_miles*0.621371);
break;

case 2:
printf("You chose inches to foot\n");
printf("How much inches you want to convert in foot?\n");
scanf("%f",&conversion_foot);
printf(" %.2f inches are %.3f foot\n",conversion_foot,conversion_foot*0.0833333 );
break;

case 3: printf("You chose cm to inches\n");
printf("How much cm you want to convert in inches?\n");
scanf("%f",&conversion_inches);
printf(" %.2f cm are %.3f inches\n",conversion_inches,conversion_inches*0.393701 );
break;

case 4: printf("You chose pound to kg\n");
printf("How much pound you want to convert in kg?\n");
scanf("%f",&conversion_kg);
printf(" %.2f pound are %.3f kg\n",conversion_kg,conversion_kg*0.453592);
break;

case 5: printf("You chose inches to metre\n");
printf("How much pound you want to convert in kg?\n");
scanf("%f",&conversion_metre);
printf(" %.2f inches are %.3f metre\n",conversion_metre,conversion_metre*0.0254);
break;
``````

}

``````}while(choice != 0);
``````

}

• @JohannesK Was sagt der Compiler und dein Eindruck vom Programm?

Wenn du deinen Code nochmal ansiehst, wirst du feststellen, dass du die ganzen conversion_xxx nicht brauchst sondern durch ein conversion ersetzen kannst.

Zudem finde ich bei cm -> inch ein `/ 2.54` übersichtlicher.
Ebenso bei inch -> feet ein `/ 12`

Tipp: markieren deinen Code im Post und drück auf das </> über dem Edit-Fenster.

• Mein Compiler beschwerte nicht über den Code und das Programm funktioniert auch gut.
Meinst du das mit deinem Tipp @DirkB ?

``````#include <stdio.h>

int main(int argc, const char * argv[]) {
float conversion_miles;
float conversion_foot;
float conversion_inches;
float conversion_kg;
float conversion_metre;
int choice;

do{
printf("\n\nWelcome to Unit converter !\n");
printf("Choose which unit you want to convert:\n");
printf("1.  km to miles\n2.  inches to foot\n3.  cms to inches\n4.  pound to kg\n5.  inches to metre\n");
scanf("%d",&choice);
switch(choice){
case 1:
printf("You chose km to miles !\n");
printf("How much kilometers you want to convert in miles?\n");
scanf("%f",&conversion_miles);
printf("%.2f kilometers are %.3f miles \n",conversion_miles,conversion_miles*0.621371);
break;

case 2:
printf("You chose inches to foot\n");
printf("How much inches you want to convert in foot?\n");
scanf("%f",&conversion_foot);
printf(" %.2f inches are %.3f foot\n",conversion_foot,conversion_foot*0.0833333 );
break;

case 3: printf("You chose cm to inches\n");
printf("How much cm you want to convert in inches?\n");
scanf("%f",&conversion_inches);
printf(" %.2f cm are %.3f inches\n",conversion_inches,conversion_inches*0.393701 );
break;

case 4: printf("You chose pound to kg\n");
printf("How much pound you want to convert in kg?\n");
scanf("%f",&conversion_kg);
printf(" %.2f pound are %.3f kg\n",conversion_kg,conversion_kg*0.453592);
break;

case 5: printf("You chose inches to metre\n");
printf("How much pound you want to convert in kg?\n");
scanf("%f",&conversion_metre);
printf(" %.2f inches are %.3f metre\n",conversion_metre,conversion_metre*0.0254);
break;

}

}while(choice != 0);

}
``````

• Du könntest die möglichen Konvertierungen als Daten speichern und dann nur zum Konvertieren einfach die passenden Daten wählen.

Also zum Starten:

``````#include <stdio.h>

typedef struct {
char unit_a[16];
char unit_b[16];
float a_to_b_factor;
} unitconversion_t;

int main() {
unitconversion_t conversions[] = {
{"miles", "km", 1.6},
{"inches", "cm", 2.54},
{"ft", "in", 12},
{"GeV/c^2", "kg", 1.78e-27}
};
int nConversions = sizeof(conversions) / sizeof(conversions[0]);
for (int i = 0; i < nConversions; ++i)
printf("select %i for conversion from %s to %s\n", i, conversions[i].unit_a, conversions[i].unit_b);

// ...
}
``````

Und: "how much kilometers" ist sprachlich, ähm, fragwürdig. Warum sind eigentlich einige Einheiten abgekürzt und andere ausgeschrieben?
Bonus: überlege dir auch, wie du hier auch die umgekehrte Umwandlung einbauen kannst (dazu ist es NICHT notwendig, die `conversions` zu erweitern).

• @JohannesK sagte in Code von vorne starten:

Meinst du das mit deinem Tipp @DirkB ?

Ja. Sieht doch gleich viel besser aus.
(du hättest auch deinen alten Beitrag editieren können: unten rechts neben Antworten Zitieren auf die drei Punkte klicken)