C-Programmierung: Eingabekontrolle Erklärung?

2 Antworten

Das ist das fiese an C. Es arbeitet ähnlich wie Maschinencode, setzt also bei normalen Befehlen einfach mal einen Rückgabewert. Bei Ein- und Ausgabebefehlen wird eine 0 gesetzt, wenn die Ein- oder Ausgabe schief lief und eine 1, wenn sie gut lief.

Lösung: Was bedeutet || im Unterschied zu | ? Richtig, || bricht ab, wenn die Bedingung richtigist. also wenn 0==scanf wird, getchar() wird dann gar nicht mehr aufgerufen. Ist die Eingabe in Ordnung (1==scanf), wird über getchar() geprüft, ob das letzte Zeichen ein Zeilenumbruch ist. Ist auch das in Ordnung, wird zum Schluss erst in While geprüft, ob n Modulo 8 null ergibt, also ob das durch 8 ohne Rest teilbar ist. Das ist schon harte Kost, so zu programmieren, einfach den Code sowohl zur Fehlerüberprüfung als auch den eigentlichen Prüfungscode in die While-Bedingung reinzusetzen. Wenn irgendwas schief läuft, Eingabe falsch oder kein Enter am Schluss oder nicht durch 8 teilbar, wird ein Fehler ausgegeben und der Tastaturpuffer (bz.w die Standardeingabe stdin) geflusht.

Dein Versuch: Da fehlt ein flush. Dann nimmst Du getchar() als Prozedur-Aufruf, nicht aber als Funktion (char c=getchar();), prüfst auch nicht, ob ein Abschluss mit der Enter-Taste erfolgt ist. Ich vermute, Dein Programm liest etwas von der Tastatur und mangels flush und korrekter Anwendung von getchar() läuft das Programm so durch, ohne wirklich eine brauchbare Ausgabe zu zeigen.

Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich

Ich hab grad keine Zeit und programmiere nicht viel in C aber aus dem Bauch heraus:

1: überprüft ob es ein Zeichen ist.

2: überprüft ob es Null ist.

3: Überprüft ob es nicht durch 8 teilbar ist.

(1 oder 2 oder 3)

//

Fu machst einfach etwas komplett anderes.

Woher ich das weiß:Studium / Ausbildung – Ich studiere beides.