我正在用 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'
)对我来说很好。所以实际上这个问题现在可以结束了。