1

我正在用 C 编写一个项目程序,我有这样的输入:

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

      honolulu
  oklahomacity
  charleston
  madison
  montgomery
  saltlakecity
  springfield

第一组数据与第二组数据用空行分隔,我需要一次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某种错误消息处理程序。肿瘤坏死因子

注意:好的,我发现输入端的驱动与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 回答