zero61 Geschrieben 5. Mai 2009 Geschrieben 5. Mai 2009 Folgende Aufgabenstellung: Abfrage: "Antworten Sie mit Ja (j) oder Nein (n):" Ausgabe: "Sie haben mit Nein geantwortet", "Sie haben mit ja geantwortet" oder "Sie haben eine falsche Eingabe gemacht." Hinweise: Hier muss man Verzweigungen verwenden. Die Syntax für das if-Konstrukt ist gleich wie bei Java. Der Datentyp für die einzulesende Variable ist char. Einzelne Zeichen werden als Konstanten immer zwischen einfache Anführungszeichen gesetzt, z.B. 'a'. Folgendes Programm habe ich darauf geschrieben. Wo ist jetzt aber der Fehler?! //--------------------------------------------------------------------------- #pragma hdrstop #include <stdio.h> #include <conio.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { char antwort printf("Antworten Sie mit JA (j) oder NEIN (n):"); scanf("%c", &antwort); //---------------------BedingungBEGINN---------------------- if (c == 'j') { printf("Sie haben mit JA geantwortet"); } if (c == 'n') { printf("Sie haben mit NEIN geantwortet"); } if ((!c=='j')||(!c=='n')) { printf("Sie haben eine falsche Eingabe gemacht"); } //---------------------BedingungENDE----------------------- return 0; } //--------------------------------------------------------------------------- Zitieren
carstenj Geschrieben 5. Mai 2009 Geschrieben 5. Mai 2009 Hi, Folgendes Programm habe ich darauf geschrieben. Wo ist jetzt aber der Fehler?! Welcher Fehler? Zitieren
zero61 Geschrieben 5. Mai 2009 Autor Geschrieben 5. Mai 2009 Danke erst einmal für die schnelle Antwort. Laut Borland C++ Builder kommt folgende Fehlermeldung: [C++ Fehler] abfrage.cpp(15): E2141 Fehler in der Deklarationssyntax Er meint damit folgende Zeile: printf("Antworten Sie mit JA (j) oder NEIN (n):"); Zitieren
unbenannt Geschrieben 5. Mai 2009 Geschrieben 5. Mai 2009 Er meint damit folgende Zeile: Sofern kein Copy&Paste-Fehler vorliegt, dürfte es sich eher um die Zeile darüber handeln, da dort das abschließende Semikolon fehlt. Folgendes fällt mir jedenfalls spontan auch noch auf: if ((!c=='j')||(!c=='n')) Das wird jedenfalls nicht zum gewünschten Ergebnis führen, da erst die Negation und anschließend der Vergleich durchgeführt wird. Stattdessen: if ((!(c=='j'))||(!(c=='n'))) oder: if (!(c=='j' || c=='n')) oder aber auch einfach folgendes Konstrukt, welches die letzte Abfrage ersparen würde: if (...) { ... } else if (...) { ... } else { ... } Zitieren
TDM Geschrieben 5. Mai 2009 Geschrieben 5. Mai 2009 (bearbeitet) char antwort; [Editerle] hmm, zu langsam. oder aber auch einfach folgendes Konstrukt, welches die letzte Abfrage ersparen würde: if (...) { ... } else if (...) { ... } else { ... } Lieber switch, ist, nach meiner Meinung, übersichtlicher. Bearbeitet 5. Mai 2009 von TDM Zitieren
carstenj Geschrieben 5. Mai 2009 Geschrieben 5. Mai 2009 Hi, ich denke er meckert wohl eher das fehlende Semikolon hinter der Variablendeklaration an: char antwort //falsch char antwort;//richtig Zitieren
Klotzkopp Geschrieben 5. Mai 2009 Geschrieben 5. Mai 2009 Stattdessen: if ((!(c=='j'))||(!(c=='n'))) oder: if (!(c=='j' || c=='n')) Das ist nicht das gleiche. Wenn du das ! ausklammerst, musst du || gegen && austauschen. Der zweite Ausdruck ist übrigens der richtige, denn der erste ist immer wahr. Zitieren
zero61 Geschrieben 5. Mai 2009 Autor Geschrieben 5. Mai 2009 Also folgende Beispiele funktionieren nun beide (endlich ) : //--------------------------------------------------------------------------- #pragma hdrstop #include <stdio.h> #include <conio.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { char antwort; printf("Antworten Sie mit JA oder NEIN"); scanf("%c",&antwort); //---------------------BedingungBEGINN---------------------- if (antwort=='j') { printf("Sie haben mit JA geantwortet"); } else if (antwort == 'n') { printf("Sie haben mit NEIN geantwortet"); } else { printf("Sie haben eine falsche Eingabe gemacht"); } //---------------------BedingungENDE----------------------- return 0; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #pragma hdrstop #include <stdio.h> #include <conio.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { char antwort; printf("Antworten Sie mit JA oder NEIN"); scanf("%c",&antwort); //---------------------BedingungBEGINN---------------------- if (antwort == 'j') { printf("Sie haben mit JA geantwortet"); } if (antwort == 'n') { printf("Sie haben mit NEIN geantwortet"); } if (!(antwort=='j' || antwort=='n')) { printf("Sie haben eine falsche Eingabe gemacht"); } //---------------------BedingungENDE----------------------- return 0; } //--------------------------------------------------------------------------- Jetzt mal die nächste Frage: Wie mach ich das jetzt nun, das er mir auch die Großbuchstaben J für JA und N für NEIN akzeptiert?! Zitieren
Klotzkopp Geschrieben 5. Mai 2009 Geschrieben 5. Mai 2009 Jetzt mal die nächste Frage: Wie mach ich das jetzt nun, das er mir auch die Großbuchstaben J für JA und N für NEIN akzeptiert?! Indem du die Eingabe vor der Auswertung in Kleinbuchstaben umwandelst: antwort=tolower(antwort); Dafür brauchst du #include <cctype> Übrigens sieht dein Code eher nach C als nach C++ aus. Zitieren
zero61 Geschrieben 5. Mai 2009 Autor Geschrieben 5. Mai 2009 Ok, das Problem hat sich nun auch gelöst! Das fängt ja richtig an Spaß zu machen //--------------------------------------------------------------------------- #pragma hdrstop #include <stdio.h> #include <conio.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { char antwort; printf("Antworten Sie mit JA oder NEIN"); scanf("%c",&antwort); //---------------------BedingungBEGINN---------------------- if (antwort=='j' || antwort=='J') { printf("Sie haben mit JA geantwortet"); } else if (antwort == 'n' || antwort=='N') { printf("Sie haben mit NEIN geantwortet"); } else { printf("Sie haben eine falsche Eingabe gemacht"); } //---------------------BedingungENDE----------------------- return 0; } //--------------------------------------------------------------------------- Zitieren
zero61 Geschrieben 5. Mai 2009 Autor Geschrieben 5. Mai 2009 Warum eigentlich conio.h? Hab ich mich auch schon gefragt, aber das steht so auf unseren Übungsblättern und so schreib ich das einfach ab Was bedeutet denn dieses conio.h ?!:eek Zitieren
Klotzkopp Geschrieben 5. Mai 2009 Geschrieben 5. Mai 2009 Was bedeutet denn dieses conio.h ?!:eekDas ist eine nicht standardisierte Headerdatei, die Deklarationen von Hilfsfunktionen zur Ein/Ausgabe auf der Konsole enthält (Console I/O). Da drin stehen üblicherweise Funktionen wie getch und gotoxy. Die Inhalte können aber von Compiler zu Compiler unterschiedlich sein. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.