C按Enter键从stdin读取行

时间:2012-11-23 00:11:36

标签: c

我正在用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某种错误消息处理程序。 TNX

注意:好的,我发现输入的结尾与CTRL + D组合相同。所以实际上支票if ( c == EOF )(或c == '\0')对我来说很好。所以实际上问题现在可以解决了。

1 个答案:

答案 0 :(得分:1)

您是否熟悉'\n'新行以及'\r\n'回车?

添加此行并处理新的行案例:

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

你见过这篇文章:

How to read a line from the console in C?