帮我看一个程序,谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/21 18:24:15
getchar()这个函数是一从标准的输入设备上读取一个字符,那么字读那一个字符怎么确定比如有一个程序他是查找包括固定字符串的行,程序是:
int getline(char s[],int lim)
{
int c,i;
i=0;
while(--lim>0&&(c=getchar())!=EOF&&c!='\n')
{
s[i++]=c;
if(c=='\n')
s[i++]=c;
s[i]='\0'

reyurn i;
}
在主函数里是这样调用的
main()
{
char line[MACLINE]

int found=0;
while(getline(line,MAXLINE))
。。。。。。。
getline()这个函数是用来实现未处理的行,假如有若干行,一行有若干字符,但是 while(--lim>0&&(c=getchar())!=EOF&&c!='\n')一句我怎么觉的是一行取一个字符,那要找出想找的字符不是每一个字符都要取回来吗,但是一行取一个怎么能保证找到那一个了符,我想不通请大侠帮我,谢谢
getline()函数的算法如下
读取一个字符
判断得到的字符是不是一行结束的字符,(EOF或 '\n')
如果不是,那么将这个字符存到缓存中,并继续读取新的字符
如果是那么向缓存中写入字符串结束标志'\0'并返回长度

每一次循环不是lim都会自减一吗,这一次循环读的是这一行的字符,那下一次循环不就跑到下一行去了吗,还是getchar()在一次循环里就把一行里所有的〔字符都取了,请指教,谢谢

while(--lim>0&&(c=getchar())!=EOF&&c!='\n')这句话是这么解释 当--lim(最大行数)没有超过最后一行,并且当取出的字符c = getchar()不为空,并且没有换行c != '\n'的时候执行while循环
每一行都从第一个字符取出,知道满足while里面的3个条件,所以这段程序不是一行只取一个字符,而是挨个字符取出,知道文件结束。

你还可以运行vc6.0 按照步骤运行一下啊程序,在while循环前设置一个断点,你就会看到你想知道的了