-
慕斯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,那这样前面的不就没用了吗?