programmwahl
-
Hallo,
ich habe vor kurzem angefangen mir C beizubringen. Habe dazu auch ein Buch. Da muss ich dann immer wieder kleine "programme" zum testen der gelernten funktionen schreiben. Jetzt wollte ich, unabhaengig vom buch, diese Programme in einem "projekt" zusammen haengen. Das sollte dann in etwa so sein, das man am anfang des programms eine auswahl hat welches unterprogramm gestartet werden soll..
für diese wahl habe ich die switch-case funktion verwendet..
allerdings habe ich jetzt das problem das er mir jedes mal das erste programm startet, unabhängig von der eingabe..Kann mir jemand aufgrund dieser aussage einen hinweis geben oder soll ich den code posten?
gruesse
achja, falls es was hilft: ich habe Win Vista un benutze Dev C++ zur Programmierung

-
Wie du das schilderst dürfte das kaum ein Problem der IDE sein.
Da versuche mal den Quelltext, wenn der nicht zu lang ist, zu zeigen.Ist der Quelltext länger dann solange kürzen bis das Problem überig bleibt

MfG f.-th.
-
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(int argc, char *argv[]) { int jahr,monat,tage; int zahl; char eingabe,abfrage; printf("\n(K)alender\n(Z)ahlenumrechner"); printf("\nBitte waehlen Sie das gewuenschte Programm: "); abfrage=getchar(); if(abfrage='K') { switch (toupper(abfrage)) { case 'K': printf("\n\t Kalender\n"); printf("\n Bitte Jahr eingeben: "); scanf("%i",&jahr); printf("\nBitte Monat eingeben: "); scanf("%i",&monat); if (monat>=1 && monat <=12 && jahr > 1582) { switch (monat) { case 2: if (!((jahr%100)%4) && (jahr%100) || !(jahr%400)) tage = 29; else tage = 28; break; case 2*2: case 6: case 9: case 11: tage = 30; break; default: tage = 31; } printf("\n Im Jahr %i hat der Monat %i %i Tage\n",jahr,monat,tage); } else printf("\n Falsche Datumsangaben!"); break; case 'Z': printf("\nBitte waelen sie (O)ktal, (H)ex oder (A)SCII > "); eingabe=getchar(); printf("\nBitte geben Sie die Dezimalzahl ein: "); scanf("%i",&zahl); switch (toupper(eingabe)) { case 'O': printf("Dezimal %i = Oktal %o \n",zahl,zahl); break; case 'H': printf("Dezimal %i = Hexadezimal %x \n",zahl,zahl); break; case 'A': if (zahl <= 255) printf("ASCII-Code %i entspricht %c \n",zahl,zahl); else printf("Diese Zahl ist zu gross ! \n\a"); break; } } system("PAUSE"); return 0; } }das ist jetz das komplette teil. wenn ich weiß wies richtig geht bau ich die andren programme noch ein

-
lol hab den fehler gefunden.
ich hab bei der if-funktion eine bedingung drin, wodurch er logischerweise nur K ausführt.. durch if(abfrage) loest sich das problem^^
-
if(abfrage='K')
ist eine Zuweisung von 'K' zu abfrage. das heißt abfrage wird indem fall immer 'K' sein. Einen echten Vergleich (wie wahrscheinlich gewünscht) erreichst du über 2 Gleichheitszeichen also if(abfrage=='K')
zu spät (:
-
ja habs auch gemerkt..
nur, wenn ich if(abfrage=='K') schreibe, killt sich das programm bei eingabe von Z.. Waehrend bei if(abfrage) gehts wie gewuenscht
trotzdem danke!
-
Kannst du den Quelltext ein wenig übersichtlicher formatieren?
Dann sieht man solche Sachen meist schneller

-
Bei dem Quelltext kann ich so auf die Schnelle nicht sagen, warum dir das Programm bei einer Eingabe von Z um die Ohren fliegt, ich hab aber mal den "Kern" so umgeschrieben dass er besser lesbar ist. Müsste auch funktionieren. (Ich habs jedoch nicht getestet)
// Deklarationen, etc... int DoLoop = 1; do { // Ausgabe von Text... abfrage=getchar(); switch(toupper(abfrage)) { case 'K': // Kalender break; case 'Z': // Zahlenumrechner break; case 'B': DoLoop = 0; break; } }while(DoLoop==1);Hier muss man dann B zum Beenden eingeben.
Hoffe, ich konnte dir helfen.MfG, Jochen
Edit: Fehlendes Semikolon ergänzt.
-
hey, danke für die "optimierung" meines quelltextes

habe grad gsehen das die funktionen mit while/doloop etc. als naechtes bei mir im buch kommen. hast es mir also vorweg genommen
mein aktueller stand is halt bis zur funktion switch..
-
Kannst die Schleife auch weglassen, dann kann man eben nur einmal eine Aktion auswählen

Mit der Schleife kann man die Programme dann beliebig oft aufrufen
MfG, Jochen