Probleme mit getchar in Funktion



  • Hallo also ich hab mich jetzt für das einlesen über getchar entschieden, das funktioiert auch soweit wie ich mir das vorstelle!
    mit:

    char * id = malloc(7);
    int c=0,counter=0;
    while(((c=getchar())!='\n'))
    {
    id[counter]=c;
    counter++;
    }kann ich jetzt meinen Text einlesen, und habe dann hier auch die möglichkeit in der Schleife die größe meines Arrays sprich der id über realloc zu vergrößern! Das funktioniert super, wenn ich es im Main Programm aufrufe!

    Jetzt zu meinem Problem:

    ich habe im Main eine Art Komandozeile über eine Endlosschleife generiert!

    while(1)
    {
    printf("ESP> ");
    scanf("%s",name);
    int input = inputReader(name);
    if(input==-1)
    {
    break;
    }

    }Jenachdem welchen [namen] mann nun eingibt, wird in der Funktion inputReader darauf reagiert! Sollte nun z.B. das Kommando line eingebeben werden, wird in der inputReader - Funktion folgendes überprüft!:

    int inputReader(char *input)
    {
    char line[]="line";

    if(strcmp(input,line)==0)
    {
    char * id = malloc(7);
    int c=0,counter=0;
    printf("Eingabe: ");
    while(((c=getchar())!='\n'))
    {
    id[counter]=c;
    counter++;
    }

    Hier ist also zu sehen, dass ich wenn das Kommando line eingegebeen wird, und korrekt ist, wieder meine Einlesefunktion abgearbeitet wird. Nun das Problem ist hier, dass ich keine Eingabe über die Konsole machen kann. Ich vermute das die while - Schleife sofort abgebrochen wird, also es müsste eine '\n' irgendwo auftreten. Leider weiß ich nicht wo und weshalb! Vielleicht kann mir ja wer helfen! Danke
    Mfg Daniel



  • Hallo Daniel!

    Leider gehen meine Kenntnisse von scanf und getchar nur so weit, dass ich nur eine Vermutung anstellen kann.

    Du hast es nicht erwähnt, aber ich nehme an, dass Du unter Windows arbeitest.
    Ein <Return> wird unter Windows als <CR><LF> interpretiert (in C-Sprech: \r\n).

    Es könnte angehen, dass scanf die Eingabe nur bis <CR> liest. Dann hängt <LF>, sprich \n noch im Zeichen-Buffer und wird vom nächsten getchar ausgelesen.

    Du kannst Dir ja den Wert der Variablen c ausgeben lassen, um diese Hypothese zu prüfen. Falls diese stimmt, kannst Du vorher einmal ein getchar aufrufen und gucken, ob das Programm dann wie gewollt reagiert.

    MfG,
    Richie


Anmelden zum Antworten