2016-04-12 12 views
0

Also ich versuche, einen Stapel in c zu implementieren. Ich habe alle Funktionen geschrieben, aber ich habe ein Problem mit der Funktion fgetc. Also hier ist ein Teil meines Codes:Eingabe Zeichen in separaten Zeilen in c

while (1) { 
    printf("Choose an option: \ 
      \n 1 Push \ 
      \n 2 Pop \ 
      \n 3 Top \ 
      \n 4 Print \ 
      \n 5 Exit\n"); 

    option = fgetc(stdin); 
    opt = ctoi(option); 

    while (opt < 1 || opt > 5) { 
     printf("Wrong entry, let's try again: \n"); 

     option = fgetc(stdin); 
     opt = ctoi(option); 
    } 

    switch (opt) { 
    case 1: push(&stack, fgetc(stdin)); break; 
    case 2: pop(&stack); break; 
    case 3: top(&stack); break; 
    case 4: print_stack(&stack); break; 
    case 5: return 0; break; 
    default: printf("impossible"); break; 
    } 

} 

ctoi ist eine Funktion, die ich geschrieben habe, die char in int konvertiert. Das Problem ist, wenn ich eingeben, für exmple:

1 

und drücken Sie die Eingabetaste, der erste Aufruf der Funktion werden mich fragen, für die Eingabe, aber die zweite (in der Push-Funktion Call) wird automatisch nach vorn ‚\ n 'als Argument, und ich möchte' \ n 'ignorieren und mich erneut um eine Eingabe bitten. Ist das möglich? Vielen Dank!

+2

Also, um es zu vergleichen, und ignoriert ... –

+0

kann ich nicht, weil der zweite Anruf ist ein Argument einer anderen Funktion. –

+0

Sie können Ihre Logik ändern, Sie wissen ... –

Antwort

5

Jedes Mal Geben Sie ein wird gedrückt, ein '\ n' ist in Stddin übrig. Sie können es durch #include <ctype.h> ignorieren und

do { 
    option = fgetc(stdin); 
} while(isspace(option)); 

Ich kann nicht schreiben, weil der zweite Aufruf ein Argument einer anderen Funktion ist.

Nun, können Sie auch Ihre eigene Funktion für die Eingabe schreiben:

int getOption(void) 
{ 
    int option; 
    do { 
     option = fgetc(stdin); 
    } while(isspace(option)) 
    return option; 
} 
+0

Danke! Das funktioniert! –