私はそのような種類の入力がある C でプロジェクトのプログラムを書いています:
............xcx............
.........qeztodlea.........
.......ecnedivorpuzy.......
.....bqfjwxqindnrsatrs.....
....ucaamadisonoctoieax....
...ozkttqdxwltstaivcilex...
...ujknnakigzfasxninltxc...
..rabxaa...kohce...oelnyd..
..rithls...momrl...spayvh..
honolulu
oklahomacity
charleston
madison
montgomery
saltlakecity
springfield
最初のデータ セットは 2 番目のデータ セットと空行で区切られているため、一度にEnter
処理する必要があります。
ターミナル ウィンドウでこのデータをコピー アンド ペーストして押しEnter
てから Ctr+D (入力の終了を意味する) を押すと正常に動作しますが、押すだけの場合Enter
でもデータを入力する必要があります。何を変更すればよいのかわからないので、最初だけEnter
入力を終了してプログラムに進みますか? この質問はばかげているように聞こえることはわかっていますが、行を読むための関数で を使用します。fgetc
たとえば、使用する場合fgets
は、最初に で停止しnl
ます 、どの関数を使用するか? 多分私は何かを手に入れません、それは一般的に可能ですか?
行を読み取るための rLine 関数が既にあります( 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;
}
、ha
ある種のエラーメッセージハンドラー。TNX
注: わかりました。入力の最後はCTRL + D
組み合わせと同じように駆動されることがわかりました。したがって、実際にはチェックif ( c == EOF )
(またはc == '\0'
)はうまく機能します。したがって、実際には質問は今までに閉じることができます。