Dlaczego scanf („% d”, […]) nie zużywa „n”? podczas gdy scanf („% c”) robi?
Tutaj, Widziałem to stwierdzenie w przyjętej odpowiedzi:
Większość specyfikatorów konwersji pomija wiodące białe znaki, w tym znaki nowej linii, ale%c
nie.
Dla mnie nie jest jasne, jakie jest uzasadnienie tych różnych zachowań, oczekiwałbym takiego jednolitego (np. Zawsze pomijając lub nigdy).
Przyszedłem do tego rodzaju problemu z takim fragmentem kodu C, jak ten:
#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;
}
Zamiana dwóchscanf
s rozwiązuje problem, jak również (skomentowane)getchar
, w przeciwnym razie'\n'
pierwszej wstawki zostanie zużyta przez drugąscanf
z%c
. Przetestowałem na gcc zarówno w systemie Linux, jak i Windows, zachowanie jest takie samo:
gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
Copyright (C) 2012 Free Software Foundation, Inc.
To jest wolne oprogramowanie; zobacz źródło warunków kopiowania. NIE ma gwarancji; nawet dla PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU.
Moje pytanie brzmi: dlaczego%d
i%c
zachowywać się inaczej w.r.t.'\n'
wscanf
?