Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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')

  • 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

|| = 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.

  • 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 !=49

usw. 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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.