我正在用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'
)对我来说很好。所以实际上问题现在可以解决了。
答案 0 :(得分:1)
您是否熟悉'\n'
新行以及'\r\n'
回车?
添加此行并处理新的行案例:
if ( c == '\n' ) { // that is a new line }
你见过这篇文章: