2016-06-23 10 views
7

Ich habe einen sehr einfachen Code Großbuchstaben umwandeln Fall zu senken:printf druckt zusätzliche Zeichen *

#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; 
} 

aber laufe diesen einfachen Code immer ich habe ein zusätzliches * Zeichen am Ausgang. Es druckt das Zeichen gefolgt von einem *. Werfen Sie einen Blick auf:

D 
d 
* 
D 
d 
* 
E 
e 
* 

Woher kommt das?

+0

Führen Sie einen debuger, prüfen Sie den Wert von 'c' in jeder Iteration ..... –

+2

Fyi, [ 'getchar()'] (http: // en .cppreference.com/w/c/io/getchar) gibt 'int' zurück und sollte entsprechend verwendet werden. – WhozCraig

+2

Was haben Sie dazu beigetragen? – sidgupta234

Antwort

12

Nach jedem Eingang aufgrund ENTER-Taste gedrückt wird, gibt es ein newline, die in dem Eingangspuffer gespeichert und bei der nächsten Iteration von getchar() lesen.

a newline (\n) hat ASCII-Wert von 10 (dezimal), an die 'a'-'A' zugegeben, die 32 (dezimal) ist, erzeugt 42 (dezimal), die die * druckt.

FWIW, getchar() gibt eine int zurück. Es ist eine sehr schlechte Idee, den Rückgabewert von getchar() in eine char Variable zu speichern, da, falls getchar() fehlschlägt, einer der möglichen Rückgabewerte, zum Beispiel EOF, nicht in einen char Typ passt, was Probleme bei weiteren bedingten Prüfungen verursacht von sogar Debug-Versuch. Ändern

char c; 

zu

int c = 0; 
+0

So, wie Sie dieses Problem loswerden? –

+1

@SuperCoolHandsomeGelBoy Verbrauchen Sie das '' \ 'n 'mit einem Dummy' getchar' ... oder ändern Sie den Code mit 'scanf'? viele Möglichkeiten – LPs

+0

Diese Dinge wurden 1000 mal zuvor beantwortet. Bei Fragen zu mysteriösen Eingangsphänomenen, die durch nachgestellte neue Zeilenzeichen in stdin verursacht werden, lesen Sie bitte das Wiki [Wie lesen/analysieren Sie Eingaben in C? Die FAQ] (http://stackoverflow.com/questions/35178520/how-to-read-parse-input-in-c-the-faq) (fühlen Sie sich frei zu verbessern, wenn etwas fehlt). Bei Fragen zu Bugs, die mit EOF als Int verbunden sind, gibt es unzählige Dubletten. – Lundin

Verwandte Themen