读书人

字符接受与断言宏,该怎么解决

发布时间: 2012-02-21 16:26:23 作者: rapoo

字符接受与断言宏
问题:
下面函数中的断言有什么问题?

C/C++ code
/* getline ─── 将一个以\n 结尾的行读入缓冲区中*/void getline(char* pch){int ch; /* ch“必须”是int */doASSERT( (ch = getchar()) != EOF );While( (*pch++=ch) != ‘\n’ )}


解答:
3)使用该断言的问题是测试包含了应保留在函数非调试版本中代码。非调试代码将进
入一个无限循环,除非在执行do 循环中,ch 碰巧等于执行符。所以函数应写成如下形式:
C/C++ code
void getline( char* pch ){int ch; /* ch 必须是int 类型*/do{ch = getchar();ASSERT( ch != EOF );}while( ( *pch++ = ch ) != ‘\n’);}


我看不太懂。ch != EOF?这里的EOF是什么?读文件的时候文件尾叫EOF,但是输入字符的时候不太清楚。对他的解答也完全看不懂,希望高手能够用自己的理解解释一下。

谢谢!

[解决办法]
输入字符的时候不太清楚
按ctrl+z 时
[解决办法]
在release版本中ASSERT宏所包含的代码将被忽略

会变成:

C/C++ code
do;While( (*pch++=ch) != ‘\n’ ) 

读书人网 >C语言

热点推荐