2017-01-24 3 views
-1

Das Programm kompiliert fgets in der teste1 Funktion nicht. Oder zumindest funktioniert es nicht richtig, es lässt mich nicht die Zeichenfolge eingeben, das Programm wird beendet, nachdem es "Nome do cliente" gedruckt hat.fgets werden wahrscheinlich wegen anderer scanfs ignoriert

Wenn ich die anderen scanf in der Funktion deaktiviert, wird es ohne irgendein Problem laufen.

Wie mache ich Fgets zum Arbeiten?

#include <stdio.h> 
void teste1(){ 
    char teste[50]; 
    printf("Nome do cliente\n"); 
    fgets(teste,50,stdin); 
} 

void teste2(){ 
    teste1(); 
} 

void teste3(){ 

     int opc1,opc2; 
     printf("\nSeleccione a área desejada\n1- Clientes\n2- Concessionários\n3- Carros de demonstração\n"); 
     scanf("%d",&opc1); 

     printf("\nSeleccione a área desejada\n1- Inserir\n2- Alterar\n3- Remover\n4- Consultar\n");  
     scanf("%d",&opc2); 

    teste2(); 
} 

int main() 
{ 
    teste3(); 
} 
+1

Also ... was ist die Frage? –

+0

Wie mache ich Fgets zum Arbeiten? – xickoh

+1

Sie sollten sehr vorsichtig sein, wenn Sie behaupten, dass der Compiler sich schlecht benimmt - das ist hier sicherlich nicht das Problem; Ihr Code macht eine falsche Annahme, wie 'scanf()' ganze Zahlen liest. –

Antwort

1

Die Geben Sie Schlüssel Sie zum letzten scanf Eingang gedrückt wird als eine neue Zeile in den Eingangspuffer gelassen werden. Die fgets Funktion liest diesen Zeilenumbruch und denkt, dass er fertig ist.

+0

Wie behebe ich das? – xickoh

+3

@xickoh: Mehrere Möglichkeiten. Eine ist es, 'fgets()' zu verwenden, um Zeilen zu lesen und dann 'sscanf()', um sie zu analysieren - das ist wahrscheinlich das Beste. Eine Alternative besteht darin, die Zeichen bis zu newline (oder EOF) nach dem 'scanf()' zu verschlingen, indem Code wie folgt verwendet wird: 'int c; while ((c = getchar())! = EOF && c! = '\ n'); '. Beachten Sie, dass der Benutzer in der Frage "3 4 Frederick Handel" in einer Zeile eingeben kann, und das würde Ihren gesamten Eingabecode erfüllen. Mit 'fgets()' plus 'sscanf()' gewinnen Sie die Kontrolle darüber, was der Benutzer eingibt (oder was Sie mit dem tun, was der Benutzer eingibt). –

+0

@ Jonathan Leffler liest fgets() ganze Zahlen? Ich habe nur vor, eine einzige ganze Zahl in diesem scan zu lesen – xickoh

Verwandte Themen