VC6.0中对以下几个函数有如下描述:
getc, getwc, getchar, getwchar
Read a character from a stream (getc, getwc), or get a character from stdin (getchar, getwchar).
Remarks
Each of these routines reads a single character from a file at the current position and increments the associated file pointer (if defined) to point to the next character. In the case of getc and getwc, the file is associated with stream
如果有以下程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
int ch;
while( (ch = getchar() ) != EOF )
{
putchar( ch );
}
}
作单步调试时:
1、按一次F10,程序运行第一步,箭头指第一个“{”时,如果此时从键盘上输入abcd并回车,输出窗口并无显示;
2、再按一次F10,程序运行第二步,箭头指向while语句,输出窗口依然无显示;
3、再按一次F10,输出窗口显示:abcd并换行,而且此时ch的值为97,即为a;
4、继续运行程序,则会依次输出abcd。
从以上步骤,我是否可以这样解释:
第一次按F10(单步调试)后,键盘上的行为( 或说成有效行为,因为有些按键行为不属于输入,如按F系列时,暂时这么说吧 )在按回车后送入内存,当第三次按F10时,此时调用getchar()函数,输出窗口将显示可显示的(有点拗口)行为,如之前输入的abcd,而且此时ch的值为97,即取得第一个输入的字符,接下来的步骤就是显示(调用putchar()函数)、再取字符(再次调用getchar()函数)…所以,getchar()只是从stdin里读取一个字符,而不应认为是从键盘中读取一个字符,而且它也触发了一种行为,将键盘的记录显示在输出窗口(当然,还是指可显示的内容),此时,显示的内容与getchar()所取得的内容是两回事。
如此啰嗦地写这些,是因为在网上看到这样的一个问题,同样也感到过困惑:
while((c=getchar())!=EOF)
putchar(c);
如果是输出多个字符的话我不明白上面这个程序的流程
不过输出单个字符的话我还可以理解
a
a
b
b
c
c
d
d
...
请问输出多个字符时的流程 例如
abcde
abcde
程序是怎么运行的
如果我输入abcd然后按回车实际的输出是abcd
按我的理解当你输入a时while判断是不是文件结束标志 结果为a不是EOF那就该输出a啊!
怎么等我输完了abcd四个字符之后按回车后abcd原样输出了!
程序是怎么个流程!
请教!
不知我的理解有何不妥之处,请大家多多指教。
[此贴子已经被作者于2006-12-2 11:49:24编辑过]