Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c]Wyjaśnienie użycia funkcji getchar() w napisanym programie.

Ostatnio zmodyfikowano 2016-12-23 15:02
Autor Wiadomość
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:
C/C++
#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;
   
}
P-155261
carlosmay
» 2016-12-21 20:23:23
C/C++
scanf( "%d", & b );
printf( "\nPodaj jakie dzialanie ma wykonac program: " );
scanf( " %c", & znak );
Możesz tak zmienić program i powinien działać.
P-155263
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 ?
P-155271
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.
P-155272
carlosmay
» 2016-12-22 07:12:22
Wstawiony fragment działa prawidłowo.
Nie raczyłeś nawet metodą kopiego-pejsta sprawdzić gotowca.
P-155273
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ł ?
P-155321
carlosmay
» 2016-12-23 14:52:54
P-155332
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
P-155336
« 1 »
  Strona 1 z 1