1

私はそのような種類の入力がある 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')はうまく機能します。したがって、実際には質問は今までに閉じることができます。

4

1 に答える 1

1

'\n'新しいラインと '\r\n'キャリッジリターンに精通していますか?

この行を追加し、新しい行の大文字小文字を処理します。

  if ( c == '\n' ) { // that is a new line }

この投稿を見たことがありますか:

Cでコンソールから行を読み取る方法は?

于 2012-11-23T01:18:54.737 に答える