2016-06-23 17 views
7

Mam bardzo prosty kod do konwertowania Wielkie litery na małe litery:printf drukuje dodatkowe * charakter

#include <stdio.h> 
int main() 
{ 
char c; 
int i=0; 
for (i=0;i<10;i++){ 
    c=getchar(); 
    c=c-'A'+'a'; 
    printf("%c\n",c); 
    } 
return 0; 
} 

Ale działa ten prosty kod zawsze mam dodatkowy * znak na wyjściu. Drukuje znak następujący po *. Spójrz:

D 
d 
* 
D 
d 
* 
E 
e 
* 

Skąd się bierze?

+0

uruchomić debuger, sprawdzić wartość 'C' w każdej iteracji ..... –

+2

Fyi [' getchar() '] (http: // pl .cppreference.com/w/c/io/getchar) zwraca 'int', i powinno być użyte odpowiednio. – WhozCraig

+2

Jaki był twój wkład w to? – sidgupta234

Odpowiedz

12

Po każdym wejścia powodu ENTER wciśnięty klawisz, istnieje newline, które są przechowywane w buforze wejściowym i przeczytać w następnej iteracji przez getchar().

newline (\n) ma wartość ASCII 10 (dziesiętnie), dodano do 'a'-'A' która 32 (dziesiętnie) daje 42 (dec), wyświetlającą *.

FWIW, getchar() zwraca wartość int. To bardzo zły pomysł, aby zapisać wartość zwracaną przez getchar() do zmiennej char, ponieważ na wypadek, gdy getchar() nie powiedzie się, jedna z możliwych wartości zwracanych, na przykład EOF, nie będzie pasować do typu char, powodując problemy podczas dalszego sprawdzania warunkowego nawet próby debuggowania. Zmień

char c; 

do

int c = 0; 
+0

Jak więc pozbyć się tego problemu? –

+1

@SuperCoolHandsomeGelBoy Zużyj ''\' n' z manekinem' getchar' ... lub zmień kod używając 'scanf'? wiele dróg – LPs

+0

Te rzeczy zostały już 1000 razy odpowiedział. W przypadku pytań dotyczących tajemniczego zjawiska wprowadzania danych spowodowanego przez śledzenie nowych znaków linii na standardowym wejściu, zapoznaj się z wiki [Jak odczytać/przeanalizować dane wejściowe w C? Najczęściej zadawane pytania] (http://stackoverflow.com/questions/35178520/how-to-read-parse-input-in-c-the-faq) (zachęcamy do poprawy jeśli czegoś brakuje). W przypadku pytań dotyczących błędów związanych z EOF będącym int, istnieje również niezliczona ilość duplikatów. – Lundin