Warum verbraucht scanf (“% d”, […]) nicht '\ n'? während scanf ("% c") tut?
HierIch sah diese Aussage in der akzeptierten Antwort:
Die meisten Konvertierungsspezifizierer überspringen jedoch führende Leerzeichen einschließlich Zeilenumbrüchen%c
nicht.
Für mich ist die Begründung für dieses unterschiedliche Verhalten nicht klar, ich hätte ein einheitliches erwartet (z. B. immer überspringen oder nie).
Ich bin mit einem Teil des C-Codes wie diesem auf diese Art von Problem gestoßen:
#include "stdio.h"
int main(void){
char ch;
int actualNum;
printf("Insert a number: ");
scanf("%d", &actualNum);
// getchar();
printf("Insert a character: ");
scanf("%c", &ch);
return 0;
}
Die beiden tauschenscanf
s löst das Problem, sowie die (kommentierte)getchar
, ansonsten der'\n'
der erste Einfügung würde von der zweiten verbraucht werdenscanf
mit%c
. Ich habe auf gcc sowohl unter Linux als auch unter Windows getestet, das Verhalten ist das gleiche:
gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
Copyright (C) 2012 der Free Software Foundation, Inc.
Dies ist freie Software; Informationen zu den Kopierbedingungen finden Sie in der Quelle. Es gibt keine Garantie; nicht einmal für die MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
Meine Frage lautet also: Warum?%d
und%c
anders verhalten w.r.t.'\n'
imscanf
?