Problem mit fgets



  • Woran kann es liegen, dassfgets in einer Unterfunktion immer übersprungen wird? Ich glaub der fehler liegt irgendwie an meiner Schleife,aber nach 3 Stunden rumprobieren bin ich immer noch nicht drauf gekommen.



  • Matze1988 schrieb:

    Woran kann es liegen,

    Daran, dass du wohl irgendwas falsch machst.
    Das ist etwa alles was man mit den Informationen, die du uns gegeben hast (nämlich garkeinen) antworten kann.

    Lies dir bitte mal den Thread "du brauchst Hilfe?" durch und formulier deine Frage nochmal neu.



  • Sorry, ich bin zum ersten Mal in so nem Forum. Jetzt hab ich mir die Einleitung durchgelesen ^^.

    Hier is ein Auszug aus meinem Code. Eigentlich soll hier nur der Kundenname und der Kontostand eingegeben werden. Bei der Funktion ke überspringt das Programm aber immer die Eingabe des Namen. Komischer Weise funktioniert das Programm wenn ich den fgets-Befehl zwei Mal hintereinander aufrufe, aber das is ja nur ein Fehler mit einem Fehler ausgeglichen :(. Ich weiß wirklich nicht wie ich den Fehler beheben kann bzw. was ich das falsch gemacht hab. Wäre toll wenn mir jemand helfen könnte ^^

    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    #include "conio.h"

    void ke(void)
    {
    char buf2[20];
    char k[100];
    float betrag;
    printf("Geben Sie den Name des neuen Kunden ein:\n");
    fgets(k,20,stdin); //Hier soll der Name eingegeben werden
    fgets(k,20,stdin);
    //sscanf_s(buf1,"%s",k);
    printf("Geben Sie das Startguthaben des Kunden ein:\n");
    fgets(buf2,20,stdin); //Hier soll das Startguthaben eingegeben werden
    sscanf_s(buf2,"%f",&betrag);
    //scanf_s("%d",&betrag);
    //fflush(stdin);
    printf("%s: %0.2f Euro",k,betrag);
    }

    void main(void)
    {
    char buf[20];
    char suchstring;
    char kunde[100]="";
    int kstd=0;
    int eingabe=0;
    int i=0;
    char c;
    printf(" 1-Kundenerstellung\n 2-Kontoeinzahlung\n 3-Kundendatenladen\n 4-ENDE\n");
    fgets(buf, 2, stdin);
    sscanf_s(buf, "%i", &eingabe);
    switch(eingabe)
    {
    case 1: ke();
    //printf("%s",ke()); //ke steht für Kundeneingabe
    //printf("%s\n",kunde);
    break;
    }
    _getch();
    }



  • willst du in c oder in c++ programmieren?
    was du präsenterist, ist c code. in c++ nehme er lieber die klasse strings und benutze er lieber cin.



  • durch das Einlesen mit scanf wird in den Eingabepuffer ein newline-Zeichen geschrieben (\n). Dieses sorgt dann dafür, dass fgets übersprungen wird.

    Zur Lösung:
    1. fflush(stdin); nach dem scanf oder vor dem fgets helfen.

    (Dies ist aber Systemabhaengig, da der C-Standard nicht vorschreibt, wie sich fflush verhalten hat)

    2. verwende erst garkein scanf sondern nur fgets

    3. entferne das Newlinezeichen durch eine eigene Implementierung.

    > http://www.hs-augsburg.de/~sandman/c_von_a_bis_z/c_005_001.htm#Xxx999339

    Wenn du mit C-Problemen in ein C++ Forum schreibst, dann wirst du nicht darauf hingewießen, dass du außerversehen im falschen Forum bist. Dann heißt es, du lernst die falsche Sprache 😃


Anmelden zum Antworten