2013-03-15 13 views
14

Przez pomyłkę użyłem scanf("%d\n",&val); w jednym z moich programów, nie mogłem zrozumieć zachowania, funkcja została pokazana.Używanie " n" w scanf() w C

int main(){ 
    int val; 
    scanf("%d\n", &val); 
    printf("%d\n", val); 
    return 0; 
} 

Teraz program wymaga 2 wejść liczb całkowitych i wypisuje pierwsze wprowadzone wejście. Jaką różnicę powinien przynieść dodatkowy \n?

Próbowałem wyszukać, ale nie mogłem znaleźć odpowiedzi, nawet za pomocą instrukcji pod numerem scanf.

Odpowiedz

8

Anonimowy lub dowolny znak odstępu - w ciągu znaków formatowania zajmuje całą (prawdopodobnie pustą) sekwencję białych znaków na wejściu. Tak więc scanf zwraca tylko wtedy, gdy napotka następny znak, który nie jest odstępem, lub koniec strumienia wejściowego (np. Gdy dane wejściowe są przekierowywane z pliku i osiągany jest jego koniec, lub po zamknięciu standardowego wejścia z Ctrl-D).

6

Od man scanf w moim Linuksie:

dyrektywa jest jedną z następujących czynności:

Sekwencja białe znaki (spacja, tabulacjami, itp .; patrz isspace (3)). Ta dyrektywa dopasowuje dowolną ilość białego spacji, w tym brak, do danych wejściowych.

BTW, %d jest również dyrektywa.

Więc twoja "%d\n" ma dwie dyrektywy, pierwsza czyta numer, a druga ... dobrze czyta każdą ilość białej spacji, włącznie z końcem linii. Musisz wpisać dowolny spoza białego znaku spacji, aby go zatrzymać.