Scanf - podwójne pobieranie danej z konsoli

Scanf - podwójne pobieranie danej z konsoli
XS
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:1
0

Witam, mój problem polega na tym, że nawet w przypadku prostego kodu (załączonego), gdy mam wpisać daną do konsoli to wymusza na mnie wpisanie dwóch danych. W tym przypadku muszę wpisać kolejno np:

3 (zatwierdzam enter)
3 (znowu zatwierdzam)

i dopiero program się wykonuje.
Wykonując bierze pod uwagę pierwszą liczbę, jednakże przy bardziej skomplikowanych programach mam problem gdyż źle przelicza.
Co ciekawe dzieje się tak tylko z pierwszą funkcją scanf, każda kolejna użyta po niej działa jak trzeba.
Nie działo się tak na początku.
Program jakiego używam to Code::blocks, jednakże w Dev jest tak samo, podobnie jak w NetBeans.
Jakieś propozycje rozwiązania?

Jeżeli to coś zmienia to program nie wyświetla mi polskich znaków w terminalu.

Kopiuj
 
#include <stdio.h>

int main(){
int a;
printf("Podaj liczbę\n");
scanf("%d\n", &a);
printf("Twoja liczba to %d\n", a);
return 0;
}
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 lata
  • Postów:1493
2

Usuń ten \n ze scanfa.

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:10 minut
0

http://www.cplusplus.com/reference/cstdio/scanf/

Whitespace character: the function will read and ignore any whitespace characters encountered before the next non-whitespace character (whitespace characters include spaces, newline and tab characters -- see isspace). A single whitespace in the format string validates any quantity of whitespace characters extracted from the stream (including none).

Czyli dopisując biały znak w format string spowodowałeś, że scanf będzie czytał tak długo, aż natrafi na nie biały znak lub koniec pliku.
białe znaki to spacja koniec linii (CR i lub LF), tabulator.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.