Veröffentlicht 8. Juli 200817 j 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
8. Juli 200817 j 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.
8. Juli 200817 j 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')
8. Juli 200817 j Auf jeden Fall muss da && hin, nicht ||. zeichen !='b' || zeichen !='c' ist immer wahr.
8. Juli 200817 j Autor 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
8. Juli 200817 j Wenn zeichen ungleich c oder zeichen ungleich q ist immer wahr. Denn eins von beiden trifft ja immer zu @TDM oh ja stimmt
8. Juli 200817 j || = 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.
8. Juli 200817 j Autor 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
8. Juli 200817 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.