Tronde Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Hallo. Ich lerne seit kurzem C. Nun habe ich eine Frage zu einem kleinen Übungsprogramm. Mir ist folgendes Programm gegeben: /* Loesung zu Aufgabe 3 */ #include <conio.h> int main () { int zeichen; while(( zeichen=getch() ) != 'q'); return 0; } Das Programm liest Zeichen von der Tastatur ein und bricht ab, sobald ich auf die Taste q drücke. Nun soll ich das Programm so verändern das das Programm bei der Eingabe der Tasten: - a,b,c - A,B,C - den Ziffern 0-9 abbricht und das Zeichen ausgibt, welches zum Abbruch führte. Nachdem ich mir nun schon einen Tag lang den Kopf zerbrochen habe würde ich gern eure Hilfe erbitten. Wie würdet ihr diese Aufgabe lösen? Mein erster Ansatz war die Abbruchbedingunen durch logische ODER aneinander zu hängen. while(( zeichen=getch() ) != 'a' || !='b') Jedoch bekomme ich dann beim Kompilieren die Fehlermeldung: syntax error before '!=' token OS: WinXP Entwicklungsumgebung: Dev-C++ Sprache: C Wenn ihr noch weitere Infos braucht, reiche ich sie gerne nach. MfG Tronde Zitieren
Guybrush Threepwood Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Du kannst deine Bedingung nicht so formulieren. Du musst das zeichen innerhalb der Schleife einlesen und im Bedigungsteil dann Prüfen was in der Variable "zeichen" steht. Zitieren
TDM Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Du kannst deine Bedingung nicht so formulieren. Du musst das zeichen innerhalb der Schleife einlesen und im Bedigungsteil dann Prüfen was in der Variable "zeichen" steht. Nicht unbedingt, man kann auch alles im While-Kopf machen... while((zeichen=getch()) != 'a' || zeichen !='b' || zeichen !='c') Zitieren
Klotzkopp Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Auf jeden Fall muss da && hin, nicht ||. zeichen !='b' || zeichen !='c' ist immer wahr. Zitieren
Tronde Geschrieben 8. Juli 2008 Autor Geschrieben 8. Juli 2008 Hi. Mit folgender Zeile klappts: while(( zeichen=getch() ) != 'a' && zeichen !='b' && zeichen !='c'); Aber warum muss ich && nehmen? Ich dachte, dass steht für UND und die Abbruchbedingung wäre nur erfüllt wenn a und b eingegeben werden. Deshalb habe ich mich für das ODER (||) entschieden. Könnt ihr mir den Unterschied vielleicht nochmal erneuern. MfG Tronde Zitieren
Guybrush Threepwood Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Wenn zeichen ungleich c oder zeichen ungleich q ist immer wahr. Denn eins von beiden trifft ja immer zu @TDM oh ja stimmt Zitieren
TDM Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 || = oder Wenn zeichen != 'b' || zeichen != 'c', dann ist entweder die erste bedingung immer richtig, oder die zweite, denn wenns b ist, ist es nicht c und umgekehrt. Zitieren
Tronde Geschrieben 8. Juli 2008 Autor Geschrieben 8. Juli 2008 Ok das verstehe ich. Nun habe ich noch eine andere Frage. Gibt es eine geschicktere Art und Weise das Programm abbrechen zu lassen ausser für alle Ziffern zeichen !=48 && zeichen !=49usw. in den Quelltext zu tippen? Gibt es in C vielleicht reguläre Ausdrücke wie in der Bash? So dass ich z.B. mit !=[48-57] den Bereich der ASCII-Codes für die Ziffern 0-9 ausklammern kann? Und erstmal vielen Dank für eure Hilfe bis hierher. MfG Tronde Zitieren
TDM Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 zeichen < 0x30 || zeichen > 0x39 ... klammert Zahlen aus. Zitieren
Tronde Geschrieben 8. Juli 2008 Autor Geschrieben 8. Juli 2008 Vielen Dank. Damit sind alle meine Fragen geklärt. MfG Tronde Zitieren
Klotzkopp Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Ich würde das so machen: while( !isalnum( zeichen = getch() ) ); (benötigt #include <ctype.h>) Wenn isalnum nicht erlaubt ist (kann bei Übungsaufgaben ja passieren), dann würde ich einen String mit den gesuchten Zeichen erstellen, und das eingegebene Zeichen da drin suchen. 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.