Veröffentlicht 5. Mai 200916 j 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; } //---------------------------------------------------------------------------
5. Mai 200916 j Hi, Folgendes Programm habe ich darauf geschrieben. Wo ist jetzt aber der Fehler?! Welcher Fehler?
5. Mai 200916 j 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):");
5. Mai 200916 j 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 { ... }
5. Mai 200916 j 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 200916 j von TDM
5. Mai 200916 j Hi, ich denke er meckert wohl eher das fehlende Semikolon hinter der Variablendeklaration an: char antwort //falsch char antwort;//richtig
5. Mai 200916 j 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.
5. Mai 200916 j 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?!
5. Mai 200916 j 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.
5. Mai 200916 j 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; } //---------------------------------------------------------------------------
5. Mai 200916 j 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
5. Mai 200916 j 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.