C liest Zeilen von stdin Ende durch drücken der EINGABETASTE

Ich Schreibe ein Programm für Projekt in C, wo ich eine solche Art der Eingabe:

  ............xcx............
  .........qeztodlea.........
  .......ecnedivorpuzy.......
  .....bqfjwxqindnrsatrs.....
  ....ucaamadisonoctoieax....
  ...ozkttqdxwltstaivcilex...
  ...ujknnakigzfasxninltxc...
  ..rabxaa...kohce...oelnyd..
  ..rithls...momrl...spayvh..

      honolulu
  oklahomacity
  charleston
  madison
  montgomery
  saltlakecity
  springfield

Ersten Satz von Daten ist getrennt vom zweiten Datensatz, indem Sie die leere Zeile, die ich brauche auf der einen Enter drücken Prozess.

Wenn ich copy-past diese Daten in das terminal-Fenster und drücken Sie Enter und dann Ctr+D ( was bedeutet das Ende der Eingabe ) funktioniert es einwandfrei, aber wenn zu drücken, nur Enter ich brauche immer noch Daten eingeben. Ich kann nicht verstehen, was Sie ändern also nur auf den ersten Enter werde ich die Eingabe beenden und gehen Sie zu meinem Programm? Ich weiß, diese Frage klingt dumm, aber in meiner Funktion für das Lesen von Zeile benutze ich fgetc, weil ich brauche, um zu überprüfen, einige Briefe, wenn z.B. fgets dann wird es halt auf den ersten nl, die Funktion zu verwenden? Vielleicht habe ich nicht bekommen, etwas, ist es möglich, im Allgemeinen?

Ich habe bereits rzeile Funktion zum Auslesen line ( mit fgetc ):

char * rLine( int * length, int * ha ){
   char *buff = malloc( LMAX ), *old = buff;
   int count = 0, maxlen = LMAX, len = maxlen, c;

    while ( (c = fgetc( stdin ) ) != '\n' ){

       if ( c == EOF ) { *ha = R_EOF; break; }

       if ( /* some conditions for c */ ) *ha = R_FALSE;

    *buff ++ = c;
     count++;

     if ( -- len == 0 ){  
       len = maxlen;
       buff = (char *)realloc( old, maxlen *= 2 );
       old = buff;
       buff += count;
   }
 }
 *length = count;
 *buff = '\0';
 return old;
}

wo ha irgendeine Art von Fehler-message-handler. Tnx

BEACHTEN Sie: OK, ich habe herausgefunden, dass Ende der Eingabe wird angetrieben gleiche wie CTRL + D Kombination. also eigentlich check if ( c == EOF ) ( oder c == '\0' ) funktioniert gut für mich. Also eigentlich die Frage geschlossen werden kann.

Warum verwenden Sie nicht nur fgets dann später prüfen, ob die Zeile, die Sie Lesen enthält die Zeichen, die Sie behandeln möchten speziell? strchr scheint, wie das richtige Werkzeug.
aber fgets Stoppt auf der ersten neuen Zeile? wie um zu überprüfen, ob enter gedrückt und es ist ein Ende der Eingabe?
Prüfen Sie, ob fgets gelesen hat, eine leere Zeile. fgets(ln, size, file) dann prüfen, ob ln[0] == '\n'.

InformationsquelleAutor NGix | 2012-11-23

Schreibe einen Kommentar