wronaf Temat założony przez niniejszego użytkownika |
[c]Wyjaśnienie użycia funkcji getchar() w napisanym programie. » 2016-12-21 19:50:43 Ćwicząc instrukcję switch napisałem w niej prosty kalkulator. Pod odpaleniu programu (bez funkcji getchar), zmienna b wynosiła 0 mimo wpisania innej liczby. Znalazłem w internecie podobny program z instrukcją switch i została tam użyta funkcja getchar, która używałem na razie zawsze tylko na końcu programu. Może ktoś wyjaśnić po co w tym miejscu ten getchar i dlaczego program bez niego nie działa ? Kod programu: #include <stdio.h> #include <stdlib.h> #include <conio.h>
int main() { int a; int b; char znak; printf( "Podaj 2 liczby calkowite do wykonania operacji logicznej." ); printf( "\nPodaj a: " ); scanf( "%d", & a ); printf( "\nPodaj b: " ); scanf( "%d", & b ); getchar(); printf( "\nPodaj jakie dzialanie ma wykonac program: " ); scanf( "%c", & znak ); switch( znak ) { case '+': printf( "\n%d+%d=%d", a, b, a + b ); break; case '-': printf( "\n%d-%d=%d", a, b, a - b ); break; default: printf( "\nERROR" ); } return 0; } |
|
carlosmay |
» 2016-12-21 20:23:23 scanf( "%d", & b ); printf( "\nPodaj jakie dzialanie ma wykonac program: " ); scanf( " %c", & znak ); Możesz tak zmienić program i powinien działać. |
|
wronaf Temat założony przez niniejszego użytkownika |
» 2016-12-21 23:17:58 No właśnie gdy napiszę kod tak jak to napisałeś, po uruchomieniu programu mimo że do zmiennej b wpisuję jakąkolwiek liczbę całkowitą, zawsze wyświetla b jako zero, mimo wpisania innej liczby, po dodaniu getchar tego problemu nie ma, ale pytanie, dlaczego ? |
|
karambaHZP |
» 2016-12-22 07:05:52 " c%" - tam jest spacja przed c. W ten sposób pozbywasz się białego znaku, który powoduje pominięcie pobrania znaku. |
|
carlosmay |
» 2016-12-22 07:12:22 Wstawiony fragment działa prawidłowo. Nie raczyłeś nawet metodą kopiego-pejsta sprawdzić gotowca. |
|
wronaf Temat założony przez niniejszego użytkownika |
» 2016-12-23 11:27:20 Kurde, nie miałem zielonego pojęcia że brak spacji może spowodować taki błąd w scanf (bo się uczyłem że znak biały nic nie robi w programie), więc przepraszam za pochopne działanie i nie sprawdzenie tego kodu. Możesz mi jednak wytłumaczyć dlaczego ten kod z getcharem działał ? |
|
carlosmay |
» 2016-12-23 14:52:54 |
|
mokrowski |
» 2016-12-23 15:02:30 O tym scanf() to poczytaj bo to po printf() następna funkcja w C która "gra, śpiewa, krawaty wiąże". A składnię ma jaką ma :-/ Dokładnie przeczytaj co może i jakie są ew. niebezpieczeństwa jej użycia https://www.securecoding.cert.org/confluence/display/c/INT05-C.+Do+not+use+input+functions+to+convert+character+data+if+they+cannot+handle+all+possible+inputs |
|
« 1 » |