为了账号安全,请及时绑定邮箱和手机立即绑定

能帮我解释一下这个程序吗?特别是我标注的几个地方,看不懂

能帮我解释一下这个程序吗?特别是我标注的几个地方,看不懂

C
mrs_empress 2016-10-06 19:20:15
查看完整描述

7 回答

?
慕斯3948292

TA贡献2条经验 获得超2个赞

//望采纳,嘻嘻
/* 这个程序是读入一组文本行,并把最长的文本行打印出来 */ 
#include <stdio.h>
#define MAXLINE 1000
 
int getline(char line[],int maxiline);
void copy(char to[],char from[]);
/* 打印最长的输入行 */ 
main()
{
    int len;                    /* 当前行长度  */ 
    int max;                   /* 目前为止发现的最长行的长度 */ 
    char line[MAXLINE];       /* 当前的输入行 */ 
    char longest[MAXLINE];   /* 用于保存最长的行 */ 
/* 打印最长的输入行  */    
    max = 0;
    while ((len = getline(line,MAXLINE)) > 0)
        if (len > max){
            max = len;
            copy(longest,line);
        }
    if (max > 0)          /* 存在这样的行  */           //这里的if语句是为了判断是否有输入行,有则输出最长的,没有就return 0;
        printf("%s",longest);
    return 0;
}
/* getline函数:将一行读入到s中并返回其长度  */ 
int getline(char s[],int lim)
{
    int  c,i;
    for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++1)   //因为i是从0开始的,所以i最后到lim-1
        s[i] = c;
    if (c == '\n'){                  //前面不等于\n成立时只执行s[i] = c;。后面的等于\n,不仅要执行s[i] = c; 还要执行++i;
       s[i] = c; 
        ++i;
    }   
    s[i] = '\0';                    //在c语言中,字符是按其所对应的ASCII码来存储的,一个字符占一个字节。第一个ASCII码,对是0,对应的字符是(Null),其实就是‘\0’,即空字符。可以通过如下ASCII码表来查询到。    
    return i;          
}
/* copy函数:将from复制到to;这里假定to足够大  */ 
void copy(char to[],char from[])
{
    int i;
     
    i=0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}
查看完整回答
1 反对 回复 2016-10-07
  • mrs_empress
    mrs_empress
    谢谢,刚开始没有看到你的回复,不好意思呀!
?
慕粉4050269

TA贡献1条经验 获得超0个赞

数组最后以/0为结束的
查看完整回答
反对 回复 2016-10-06
?
mrs_empress

TA贡献11条经验 获得超2个赞

/* 这个程序是读入一组文本行,并把最长的文本行打印出来 */ 
#include <stdio.h>
#define MAXLINE 1000

int getline(char line[],int maxiline);
void copy(char to[],char from[]);
/* 打印最长的输入行 */ 
main()
{
	int len;                    /* 当前行长度  */ 
	int max;                   /* 目前为止发现的最长行的长度 */ 
	char line[MAXLINE];       /* 当前的输入行 */ 
	char longest[MAXLINE];   /* 用于保存最长的行 */ 
/* 打印最长的输入行  */ 	
	max = 0;
	while ((len = getline(line,MAXLINE)) > 0)
		if (len > max){
			max = len;
			copy(longest,line);
		}
	if (max > 0)          /* 存在这样的行  */           //这里的if语句有什么用,是为了排除'\0'的存在吗?
		printf("%s",longest);
	return 0;
}
/* getline函数:将一行读入到s中并返回其长度  */ 
int getline(char s[],int lim)
{
	int  c,i;
	for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++1)   //这里的lim-1是什么意思?且我用软件编译时提示错误,为什么? 
		s[i] = c;
	if (c == '\n'){                  //为什么前面不等于\n,现在要等于\n,做的事情不是都一样吗? 
		s[i] = c;	
		++i;
	}	
	s[i] = '\0';                    //为什么又把它变为0,那么赋值有什么作用呢? 
	return i;			
}
/* copy函数:将from复制到to;这里假定to足够大  */ 
void copy(char to[],char from[])
{
	int i;
	
	i=0;
	while ((to[i] = from[i]) != '\0')
		++i;
}


查看完整回答
反对 回复 2016-10-06
?
mrs_empress

TA贡献11条经验 获得超2个赞

这里的'\0'是代表空字符,看错了,但是仍有问题,为什么又把s【i】=0,那这样前面的不就没用了吗?

查看完整回答
反对 回复 2016-10-06
  • 7 回答
  • 0 关注
  • 1722 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信