繁体   English   中英

C从stdin读取行,方法是按Enter

[英]C read lines from stdin ending by pressing Enter

我正在用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' )对我来说还不错。 因此,实际上,这个问题现在可以解决。

您是否熟悉'\\n'换行和'\\r\\n'换行?

添加此行并处理新的行情况:

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

您看过这篇文章吗?

如何从C中的控制台读取一行?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM