PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gesuchter Befehl [gelöst]



KaffeeSahne
06.09.2006, 15:20
Hallo,

ich geh auf eine Schule für Informationstechnische Asistenten, und da lernen wir dann auch Progen und wir fangen mit C an.
Nun haben wir halt angefangen und auch schon unsere Programme geschrieben, aber mir fehlt ein kleiner Befehl den ich nicht finde.
Und zwar wenn ich mir ein Menü bastel so wie hier:



clrscr();
printf("\t\t\t\t##################\n");
printf("\t\t\t\t#Rechenprogramm #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#Menü #\n");
printf("\t\t\t\t#1.Addition #\n");
printf("\t\t\t\t#2.Subtraktion #\n");
printf("\t\t\t\t#3.Multiplikation #\n");
printf("\t\t\t\t#4.Division #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#0.Beenden #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#Ihre Wahl: #\n");
printf("\t\t\t\t##################\n");
scanf("%i", &wahl);


und wenn ich dann auf 0-4 drücke, dann möchte ich gerne sofort in das Programm starten kann, also nicht das ich das mit der Eingabe-Taste bestätigen muss.

Wäre nett wenn mir jemand helfen könnte wäre ich ihm sehr dankbar.
Und schon mal danke Im Voraus.... ;)

Maximus
06.09.2006, 16:18
Hallo,

Ich glaube die meisten hier schreiben ihre C Programme für den Mikroprozessor (ich auch), und benutzen deswegen verschiedene "Include"-Datein (Head-Dateien oder so.)

Aber da, wie es scheint, du grundsätzliche Befehle suchst kann ich dir sogar weiterhelfen.

Du könntest es über eine if-Bedingung lösen:
also:

if (wahl == 1)
{
//Addition
}
else if (wahl == 2)
{
//Subtraktion
}

Oder du könntest es mit der switch-Anweisung machen (empfiehlt sich wenn du mehrere Ergebnisse abgleichen musst)

lies dir am besten das Tutorial durch:
https://www.roboternetz.de/wissen/index.php/C-Tutorial

MFG
Maximus

PasstScho
06.09.2006, 16:45
Hallo,
@Maximus: Ich glaube du hast sein Problem nicht ganz verstanden.
Ihm gefällt es nicht, dass man bei scanf ein return eingeben muss, und er will wissen wie das ohne return geht.

@KaffeeSahne: Soweit ich weiß, gibt es dein Problem nicht im C-Standard. Das bedeutet natürlich nicht, dass dein Problem nicht lösbar ist - es bedeutet nur, dass es vom Compiler/Betriebsystem und sonst was alles abhägt.
Unter Windows sollte dir da kbhit() aus der Datei conio.h weiterhelfen.

MfG Alex

SprinterSB
06.09.2006, 16:51
Das ist Abhängig von der Plattform etc.

google mal nach kbhit, getch, conio.h

KaffeeSahne
06.09.2006, 20:37
Erst einmal danke für die schnellen Antworten, aber ich verstehen es nicht ganz deswegen werde ich nun einmal den kompletten Quelltext posten.



#include <stdio.h>
main(){
int zahl1, zahl2, wahl, summe;

clrscr();
printf("\t\t\t\t##################\n");
printf("\t\t\t\t#Rechenprogramm #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#Men #\n");
printf("\t\t\t\t#1.Addition #\n");
printf("\t\t\t\t#2.Subtraktion #\n");
printf("\t\t\t\t#3.Multiplikation#\n");
printf("\t\t\t\t#4.Division #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#0.Beenden #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#Ihre Wahl: #\n");
printf("\t\t\t\t##################\n");
scanf("%i", &wahl);

if(wahl==1){
clrscr();
printf("Sie haben sich fr die Rechenmethode Addition entschieden\n\n\a");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1+zahl2;
printf("Das Ergebniss lautet: %i + %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl==2){
clrscr();
printf("Sie haben sich fr die Rechenmethode Subtraktion entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1-zahl2;
printf("Das Ergebniss lautet: %i - %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl==3){
clrscr();
printf("Sie haben sich fr die Rechenmethode Multiplikation entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1*zahl2;
printf("Das Ergebniss lautet: %i * %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl==4){
clrscr();
printf("Sie haben sich fr die Rechenmethode Division entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
if(zahl2<=0){
printf("Sie drfen nicht durch 0 teilen\a");
}
else{
summe=zahl1/zahl2;
printf("Das Ergebniss lautet: %i / %i = %i ",zahl1, zahl2, summe);
getch();
}
}

else if(wahl==0){
clrscr();
printf("\t\t\tHier endet das Programm.\n");
printf("\t\t\tAuf wiedersehen.");
}

while (wahl>=5){
clrscr();
printf("Sie haben falsch gewählt");
printf("\t\t\t\t##################\n");
printf("\t\t\t\t#Rechenprogramm #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#Men #\n");
printf("\t\t\t\t#1.Addition #\n");
printf("\t\t\t\t#2.Subtraktion #\n");
printf("\t\t\t\t#3.Multiplikation#\n");
printf("\t\t\t\t#4.Division #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#0.Beenden #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#Ihre Wahl: #\n");
printf("\t\t\t\t##################\n");
scanf("%i", &wahl);

if(wahl==1){
clrscr();
printf("Sie haben sich fr die Rechenmethode Addition entschieden\n\n\a");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1+zahl2;
printf("Das Ergebniss lautet: %i + %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl==2){
clrscr();
printf("Sie haben sich fr die Rechenmethode Subtraktion entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1-zahl2;
printf("Das Ergebniss lautet: %i - %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl==3){
clrscr();
printf("Sie haben sich fr die Rechenmethode Multiplikation entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1*zahl2;
printf("Das Ergebniss lautet: %i * %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl==4){
clrscr();
printf("Sie haben sich fr die Rechenmethode Division entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
if(zahl2<=0){
printf("Sie drfen nicht durch 0 teilen\a");
}
else{
summe=zahl1/zahl2;
printf("Das Ergebniss lautet: %i / %i = %i ",zahl1, zahl2, summe);
getch();
}
}

else if(wahl==0){
clrscr();
printf("\t\t\tHier endet das Programm.\n");
printf("\t\t\tAuf wiedersehen.");
}
}
getch();
}

ogni42
06.09.2006, 20:53
Ganz einfach:

statt scanf irgendeine Funktion nehmen, die Sprinter gepostet hat


char c = ' ';
do
{
c = getc();
} while (c < '1' || c>'5')
int selection = atoi(c);


Da ich das genaue Verhalten von getc & Co nicht im Kopf habe, solltest Du vorher noch einen Blick in die Beschreibung werfen.

robocat
06.09.2006, 21:01
lol, lustiger code.. ;)
das geht aber eleganter, try this:

#include <stdio.h>
#include <conio.h>

int menu(void)
{
clrscr();
printf("\t\t\t\t##################\n");
printf("\t\t\t\t#Rechenprogramm #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#Men? #\n");
printf("\t\t\t\t#1.Addition #\n");
printf("\t\t\t\t#2.Subtraktion #\n");
printf("\t\t\t\t#3.Multiplikation#\n");
printf("\t\t\t\t#4.Division #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#0.Beenden #\n");
printf("\t\t\t\t# #\n");
printf("\t\t\t\t#Ihre Wahl: #\n");
printf("\t\t\t\t##################\n");

return getch(); // <----- hier was du wolltest, liefert den ascii code des zeichens

}

int main(void){
int zahl1, zahl2, wahl, summe;

for(;;) // endlos-schleife
{

clrscr();
wahl=menu();

if(wahl=='1'){
clrscr();
printf("Sie haben sich f?r die Rechenmethode Addition entschieden\n\n\a");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1+zahl2;
printf("Das Ergebniss lautet: %i + %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl=='2'){
clrscr();
printf("Sie haben sich f?r die Rechenmethode Subtraktion entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1-zahl2;
printf("Das Ergebniss lautet: %i - %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl=='3'){
clrscr();
printf("Sie haben sich f?r die Rechenmethode Multiplikation entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
summe=zahl1*zahl2;
printf("Das Ergebniss lautet: %i * %i = %i ",zahl1, zahl2, summe);
getch();
}

else if(wahl=='4'){
clrscr();
printf("Sie haben sich f?r die Rechenmethode Division entschieden\n\n");
printf("Bitte geben sie die erste Zahl an ");
scanf("%i", &zahl1);
printf("Bitte geben sie die zweite Zahl an ");
scanf("%i", &zahl2);
if(zahl2<=0){
printf("Sie d?rfen nicht durch 0 teilen\a");
}
else{
summe=zahl1/zahl2;
printf("Das Ergebniss lautet: %i / %i = %i ",zahl1, zahl2, summe);
getch();
}
}

else if(wahl=='0'){
clrscr();
printf("\t\t\tHier endet das Programm.\n");
printf("\t\t\tAuf wiedersehen.");
getch();
break;
}

} // end for
return 0;
}
die for-schleife läuft bis zum break, wenn ascii '0' getippt wird.

vielleicht für zahl1, zahl2, summe float/double nehmen? dann gehen kommazahlen, musst nur im scanf/printf %i in %f (float) bzw. %lf (=longfloat, double) ändern. ausserdem geht 1/-1 nicht, weil du alles <=0 abwürgst. also da ein ==0 hin.

gib auch mal statt einer zahl einen buchstaben ein.. wirst sehen, dass du fehleingaben noch nicht abfängst. aber ich wills etz nicht übertreiben an perfektion.. ^^

noch was am rande:
ist euch schon aufgefallen, was für eine kunst es ist, hier geposteten code zu copypasten, wenn er länger als eine seite ist? keiner meiner browser kann das. evtl wäre da eine "alles-markieren" funktion ganz nett..

gruesse von der katze

KaffeeSahne
06.09.2006, 21:46
Jau danke, nu klappt es genau so wie ich das gern hab.
Seid echt klasse und ziehmlich schnell^^