猿问

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

mrs_empress
浏览 1723回答 7
7回答

慕斯3948292

//望采纳,嘻嘻 /* 这个程序是读入一组文本行,并把最长的文本行打印出来 */  #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; }

慕粉4050269

数组最后以/0为结束的

mrs_empress

/* 这个程序是读入一组文本行,并把最长的文本行打印出来 */  #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; }

mrs_empress

这里的'\0'是代表空字符,看错了,但是仍有问题,为什么又把s【i】=0,那这样前面的不就没用了吗?
随时随地看视频慕课网APP
我要回答