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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie vertraut mit
'\n'
für eine neue Zeile und'\r\n'
für carriage return?fügen Sie diese Zeile und Griff die new-line-Fall:
Haben Sie gesehen, dieser Beitrag:
Wie liest eine Zeile von der Konsole in C?
egal, was die Linie zu brechen mit "\n". Wenn Sie denken, es ist nicht klar, in meiner Antwort, lassen Sie mich bitte wissen. Dank
"Sind Sie vertraut mit '\n' für eine neue Zeile und "\r\n' carriage return" meinte ich. Linux verwendet /n für Zeilenumbruch.
Ich tippe dies von einer Linux-Maschine. Carriage return, ascii 10 -> newline.
Ich will nicht, um ehrlich zu sein hier, und ich weiß, dass dein Kommentar ist 4 Jahre alt zu der Zeit des Schreibens dieses Artikels, aber
'\n'
nicht soll mit doppelten Anführungszeichen geschützt werden! InC
'\n'
und"\n"
sind zwei verschiedene Dinge.'\n'
ist einchar
und"\n"
ist einchar *
,char array
usw. Außerdem, die verschiedenen Arten nicht verglichen werden kann mit==
oder!=
.InformationsquelleAutor 0x90