C Stimmt was mit meinem dev c++ compiler nicht ?

Losti73

Lieutenant
Registriert
Mai 2013
Beiträge
979
Ich habe mir den gratis dev c++ Compiler runtergeladen, und war auch immer zufrieden.... bis heute ...
in folgendem Programm wird der "getchar" befehl 2 mal verwendet, wobei er beim 2. mal immer ignoriert wird.
Also ziel dieses Programmes ist es einen Buchstaben einzulesen , diesen dann auszugeben
und damit sich das Programm dann nicht automatisch beendet nochmal der getchar befehl am ende.
Letzter getchar wird ignoriert. Das Programm beendet sich selbständig.

#include <stdio.h>
#include <stdlib.h>

int main()
{
char zeichen;
printf("Ein Zeichen bitte eingeben:");
zeichen=getchar();
printf("Du hast %c eingegeben",zeichen);
printf("\nTaste Druecken");
getchar();
return (0);
}

in meinem anderen Programm funktioniert der getchar befehl weil er nur ein mal verwendet wird.
Liegt das am Compiler ?

bedanke mich fürs lesen und helfen
schönen abend noch
losti
 
Läuft doch richtig.
Du gibst 2 Zeichen ein, z.B. 1 und Zeilenende / ENTER, getchar kann also 2 Zeichen einlesen. Beim ersten mal die 1 und beim zweiten mal Zeilenende, danach wird dann beendet, wenn du 3 getchars verwenden würdest klappts.

TL;DR dein input buffer ist nach einem getchar nicht leer.
 
Durch den Druck auf Eingabe wird der Tastaturpuffer mit zwei Zeichen gefüllt, nämlich mit dem char zeichen und eben Enter.
Daher solltest du nach zeichen=getchar(); den Puffer leeren mittels fflush(stdin);
 
http://stackoverflow.com/questions/7898215/how-to-clear-input-buffer-in-c

Das könnte noch interessant für dich sein, weiteres, den getchar() sollte man sowieso flushen => fflush().

getchar() ist (soviel ich mich erinnere) sowas wie ein Stack, der einfach alles was du tippst in ein Feld schreibt. Deshalb wäre es sinnvoll, denn wieder zu leeren

Aber wenn du schon eine printf() Funktion nützt, kannst du auch das scanf() verwenden.
 
Mit pufferleerung geht's ! Danke ihr seid die besten, jetzt kann ich ruhig schlafen.
Sonst hätt mich das sicher noch im schlaf verfolgt :D

ach ja ich könnte den scanf befehl verwenden, den hab ich vor ein paar tagen gelernt, und nun ist getchar dran :D
scanf beherrsche ich so halbwegs

nochmals danke und gute nacht
 
Losti73 schrieb:
Ich habe mir den gratis dev c++ Compiler runtergeladen
Der Begriff gratis könnte darauf hinweisen, dass Du ihn aus keiner seriösen Quelle (irgendein Download-Portal) hast.
Regulär findet man ihn auf SouceForge, einer Entwickler-Plattform für OpenSource-Software: https://sourceforge.net/projects/orwelldevcpp/

Und um mal die Begrifflichkeiten zu klären. Dev C++ ist kein Compiler. Es ist eine Entwicklungsumgebung (IDE), welche den GCC als Compiler verwendet.

Gruß
A.
 
asdfman, ich mach mal deinen Job.
An alle die dem TE fflush(stdin) vorgeschlagen haben und den TE selbst, bitte beachten:
asdfman schrieb:
Du brauchst diesen Aufruf nicht:
http://pubs.opengroup.org/onlinepubs/009695299/functions/fflush.html

fflush() behandelt ausschließlich Ausgabeströme. Was fflush(stdin) macht, legt der Standard nicht fest und jede Implementierung kann damit machen, was sie will.

€: Etwas produktivere Antwort:
1. http://c-faq.com/stdio/stdinflush.html
2. http://c-faq.com/stdio/stdinflush2.html

€2: Bonuserleuchtung! :3
3. http://c-faq.com/stdio/scanfprobs.html

Gruß
BlackMark
 
Zurück
Oben