字符接受与断言宏

时间:2008-05-14 10:37:27   来源:论坛整理  作者:  编辑:chinaitzhe
问题:
下面函数中的断言有什么问题?
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





/* getline ─── 将一个以\n 结尾的行读入缓冲区中*/

void getline(char* pch)

{

int ch; /* ch“必须”是int */

do

ASSERT( (ch = getchar()) != EOF );

While( (*pch  =ch) != ‘\n’ )

}





解答:
3)使用该断言的问题是测试包含了应保留在函数非调试版本中代码。非调试代码将进
入一个无限循环,除非在执行do 循环中,ch 碰巧等于执行符。所以函数应写成如下形式:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





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





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





do

;

While( (*pch  =ch) != ‘\n’ )







是一个无限循环

EOF是输入流的结束符,包括读文件,I/O等
网友回复:谢谢两位,呵呵,两位答案一综合就是完美答案了。
关键字:字符,接受,断言,

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面