PlanetCoding
Registrierung Kalender Mitgliederliste Teammitglieder Suche Pinwand Häufig gestellte Fragen Zur Startseite
PlanetCoding » Coding » C(++) » scanf()-Problem » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen scanf()-Problem
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
eFrane
Anfänger


Dabei seit: 08.10.2005
Beiträge: 12
Herkunft: Berlin
Referer: Infinite Google
eFrane ist männlich

Mitglied bewerten


Zeige eFrane auf Karte
Fragezeichen scanf()-Problem Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Kann mir mal jemand erklären, warum dieser Code bei Falscheingabe die printf()-Ausgabe immer häufiger als einmal macht?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
#include <stdio.h>
int main(void) {
   char test;
   while(1) {
     printf("Make a choice (y/n): \n");
     scanf("%c", &test);
     if (test == 'y' || test == 'n') break;
   }
   return 0;
}


__________________
SELECT * FROM brain WHERE clue > 0;

0 ROWS RETURNED

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eFrane: 08.11.2009 23:57.

08.11.2009 23:55 eFrane ist offline Homepage von eFrane Beiträge von eFrane suchen Nehmen Sie eFrane in Ihre Freundesliste auf
ThiefMaster
Admin :: Dauerposter


images/avatars/avatar-90.png

Dabei seit: 16.01.2002
Beiträge: 1.276
ThiefMaster ist männlich
Bewertung: 
13 Bewertung(en) - Durchschnitt: 7,31


Zeige ThiefMaster auf Karte
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ganz einfach: du liest auch den Zeilenumbruch.

__________________
Mozilla Firefox User und stolz drauf! Augenzwinkern

Huldigt mir, ich bin /root großes Grinsen

Schaut auch mal bei Webskyline vorbei.
Get Firefox!

08.11.2009 23:58 ThiefMaster ist offline E-Mail an ThiefMaster senden Homepage von ThiefMaster Beiträge von ThiefMaster suchen Nehmen Sie ThiefMaster in Ihre Freundesliste auf Fügen Sie ThiefMaster in Ihre Kontaktliste ein AIM-Name von ThiefMaster: ThiefMaster66 YIM-Name von ThiefMaster: ThiefMaster66 MSN Passport-Profil von ThiefMaster anzeigen
Chris Hunter
S-Mod :: Rund-um-die-Uhr - Poster


images/avatars/avatar-173.gif

Dabei seit: 19.08.2002
Beiträge: 2.141
Herkunft: Frankfurt
Referer: google/yahoo
Realname: padapow pow pow patz patz
Chris Hunter ist männlich
Bewertung: 
19 Bewertung(en) - Durchschnitt: 8,47


Zeige Chris Hunter auf Karte
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich verstehs nicht....
scanf hält die ausgabe doch an und liest die eingabe aus stdin und friemelt das in die angegebene variabel....
oder seh ich das falsch? wie verhält sich scanf denn genau?

__________________

09.11.2009 07:54 Chris Hunter ist offline E-Mail an Chris Hunter senden Homepage von Chris Hunter Beiträge von Chris Hunter suchen Nehmen Sie Chris Hunter in Ihre Freundesliste auf Fügen Sie Chris Hunter in Ihre Kontaktliste ein AIM-Name von Chris Hunter: Lichtreflektor MSN Passport-Profil von Chris Hunter anzeigen
eFrane
Anfänger


Dabei seit: 08.10.2005
Beiträge: 12
Herkunft: Berlin
Referer: Infinite Google
eFrane ist männlich

Mitglied bewerten

Themenstarter Thema begonnen von eFrane

Zeige eFrane auf Karte
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Habe eine Lösung gefunden, die sich glaube ich auf das was ThiefMaster mit dem Zeilenumbruch bezieht. Aber warum es mit diesem scanf() funktioniert ist mir trotzalledem ein Rätsel, bzw. warum es mit dem anderen nicht geht.

code:
1:
scanf("\n %c", &test);


__________________
SELECT * FROM brain WHERE clue > 0;

0 ROWS RETURNED
09.11.2009 09:15 eFrane ist offline Homepage von eFrane Beiträge von eFrane suchen Nehmen Sie eFrane in Ihre Freundesliste auf
ThiefMaster
Admin :: Dauerposter


images/avatars/avatar-90.png

Dabei seit: 16.01.2002
Beiträge: 1.276
ThiefMaster ist männlich
Bewertung: 
13 Bewertung(en) - Durchschnitt: 7,31


Zeige ThiefMaster auf Karte
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Ich verstehs nicht.... scanf hält die ausgabe doch an und liest die eingabe aus stdin und friemelt das in die angegebene variabel.... oder seh ich das falsch? wie verhält sich scanf denn genau?
%c ist ein Zeichen - auch Zeilenumbrüche sind Zeichen. Also liest du bei "x\n" zuerst das x und dann das \n.

Allgemein ist scanf keine wirklich schöne Art und Weise, Benutzereingaben abzufragen.
Zumindest unter unixoiden Systemen ist readline() definitiv komfortabler. Wenn nötig kann man das danach dann natürlich mit sscanf zerlegen, wobei oft ein strcasecmp oder atoi ausreicht.

__________________
Mozilla Firefox User und stolz drauf! Augenzwinkern

Huldigt mir, ich bin /root großes Grinsen

Schaut auch mal bei Webskyline vorbei.
Get Firefox!

09.11.2009 09:52 ThiefMaster ist offline E-Mail an ThiefMaster senden Homepage von ThiefMaster Beiträge von ThiefMaster suchen Nehmen Sie ThiefMaster in Ihre Freundesliste auf Fügen Sie ThiefMaster in Ihre Kontaktliste ein AIM-Name von ThiefMaster: ThiefMaster66 YIM-Name von ThiefMaster: ThiefMaster66 MSN Passport-Profil von ThiefMaster anzeigen
Chris Hunter
S-Mod :: Rund-um-die-Uhr - Poster


images/avatars/avatar-173.gif

Dabei seit: 19.08.2002
Beiträge: 2.141
Herkunft: Frankfurt
Referer: google/yahoo
Realname: padapow pow pow patz patz
Chris Hunter ist männlich
Bewertung: 
19 Bewertung(en) - Durchschnitt: 8,47


Zeige Chris Hunter auf Karte
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

danke, des hab ich mir fast schon so gedacht

__________________

09.11.2009 17:57 Chris Hunter ist offline E-Mail an Chris Hunter senden Homepage von Chris Hunter Beiträge von Chris Hunter suchen Nehmen Sie Chris Hunter in Ihre Freundesliste auf Fügen Sie Chris Hunter in Ihre Kontaktliste ein AIM-Name von Chris Hunter: Lichtreflektor MSN Passport-Profil von Chris Hunter anzeigen
Hanfling
Assembler-Coder


Dabei seit: 11.01.2003
Beiträge: 652
Herkunft: Marburg
Realname: Sebastian
Hanfling ist männlich
Bewertung: 
4 Bewertung(en) - Durchschnitt: 7,25


Zeige Hanfling auf Karte
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das Problem mit scanf() ist halt das sich oft davor oder nach noch Zeichen im stdin Stream befinden. Ich mach (in den Fällen wo ich scanf benutze, meist wenn mich wer was bzgl. dessen fragt) das meistens in der Art:
code:
1:
2:
3:
4:
5:
fseek(stdin, 0, SEEK_END)
printf("Enter something: ");
scanf(...);


Bei nur einem Zeichen kann man auch gut getchar() benutzen, btw-

__________________
Perl: Eine kryptische Programmiersprache um sich mit Tieren zu Unterhalten.

Langsam nervt das Thead geschließe:
a) Das Gelaber über das Thread schließen ist mehr Spam als man dadurch verhindert.
b) Es nervt, wenn man noch was ergänzen wollte.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Hanfling: 10.11.2009 22:15.

10.11.2009 22:14 Hanfling ist offline Homepage von Hanfling Beiträge von Hanfling suchen Nehmen Sie Hanfling in Ihre Freundesliste auf Fügen Sie Hanfling in Ihre Kontaktliste ein
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
PlanetCoding » Coding » C(++) » scanf()-Problem

Forensoftware: Burning Board 2.3.1, entwickelt von WoltLab GmbH