tastatur eingaben



  • Hm, ich habe es jetzt mal mit fgets versucht, nur wenn ich das Programm ausführe, wird die Stelle wieder übersprungen. Der Compiler meldet aber keinen Fehler.

    fgets(sp,30,datei);
    

    😞



  • glaube

    fgets(string,sizeof(string),stdin);

    dürfte klappen

    gruß



  • fgets(sp,sizeof(sp),stdin);
    

    klappt auch nicht =I



  • sorry dann weiß ich auch nicht... am besten du postest den source ausschnitt...
    unter linux hatte ich auch mal so ein prob glaub habe es mit fflush(stdin); lösen können

    good luck



  • int woerter()
    {
    
      FILE *datei;
      datei = fopen ( "vok.txt" , "a+" );
    
      char sp[30], dt[30];
    
      printf("Spanisches Wort: ");
      fgets(sp,sizeof(sp),stdin);
      fflush(stdin);
    
      printf("%c\n",sp);
    
      printf("Deutsches Wort: ");
      fgets(dt,sizeof(dt),stdin);
      fflush(stdin);
    
      return 0;
    
    }
    


  • Dieses

    fflush(stdin);
    

    wird zwar wahrscheinlich bei euch funktionieren, ist aber nicht standardkonform.
    ("Diese Funktion leer den Puffer, [...].
    Nach ANSI C ist das Verhalten undefiniert, wenn es sich um einen Eingabe-Stream
    handelt. Die meisten Compiler leeren dann den Puffer.")

    gruß,
    walker



  • ich erlaube mir mal den code ein wenig umzuschreiben....

    int woerter() 
    { 
    
      FILE *datei; 
      datei = fopen ( "vok.txt" , "a+" ); 
      if(!datei) // falls datei nicht erstellt oder im write modus geöffnet werden kann
         return -1;
    
      char sp[30], dt[30]; 
    
      printf("Spanisches Wort: "); 
      fgets(sp,sizeof(sp),stdin); 
      fflush(stdin);
    
    //  printf("%c\n",sp);   war der fehler, dass nur ein Zeichen ausgegeben wurde?
      printf("%s\n",sp);  // "%s" steht für string "%c" für char
    
      printf("Deutsches Wort: "); 
      fgets(dt,sizeof(dt),stdin); 
      fflush(stdin); 
    
      fclose(datei);
    
      return 0; 
    
    }
    

    sorry hab kein gcc zur zeit. unter vc++ läuft der code und dass ohne fflush(stdin);

    good luck



  • Hm, also ich rufe die Funktion in einer Schleife auf. Jedesmal nachdem ihr das spanische Wort eingegeben hab lasse ich es mir testweise ausgeben, nur es wird nur ab dem 2. Durchlauf ausgegeben 😕



  • ich schreib den code jetzt so, wie ich ihn schreiben würde.... wie gesagt unter vc++ 😡

    int woerter()  
    {  
    
      FILE *datei;  
      char sp[30]="", dt[30]="";  // bei reinem darf man variablen nicht mitten in der funktion deklarieren
    
      datei = fopen ( "vok.txt" , "a+" );  
      if(!datei) // falls datei nicht erstellt oder im write modus geöffnet werden kann 
         return -1; 
    
    //  char sp[30], dt[30];  
    
      printf("Spanisches Wort: ");  
      fgets(sp,sizeof(sp),stdin);  
      fflush(stdin); 
    
      fputs(sp,datei); // schreiben in datei
    
    //  printf("%c\n",sp);   war der fehler, dass nur ein Zeichen ausgegeben wurde? 
      printf("%s",sp);  // "%s" steht für string "%c" für char                     
    
      printf("Deutsches Wort: ");  
      fgets(dt,sizeof(dt),stdin);  
      fflush(stdin);
    
      fputs(dt,datei); // schreiben in datei  
    
      fclose(datei); 
    
      return 0;  
    
    }
    

    btw fgets hängt char 13,10 also "\n" mit an den string

    sonst weiß ich auch nichts mehr 😞

    good luck



  • ich weiß woran es lag: Ich hab den Buffer vor der ersten Eingabe komplett leeren lassen und dann hat's geklappt. Danke an alle! 🙂


Anmelden zum Antworten