69,381
社区成员
发帖
与我相关
我的任务
分享
例题:
#include <stdio.h>
#define MAXLINE 1000 /*允许输入行的最大长度*/
int getline(char s[],int lim);
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)
printf("%s",longest);
return 0;
}
int getline(char s[],int lim)
{
int c,i;
for(i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)
/*
为什么是lim-1,定义lim最大为1000,那lim-1=999,i最大为998,从0到998有999个字符,假设我输入了999个字符,还剩一个,底下的\n则是等第1000个字符,那\0怎么办呢?
跟它相关的习题解答写的是lim-2,似乎更合理一些,在这道例题底下,到底哪个对呢?
*/
s[i] = c;
if(c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[],char from[])
{
int i;
i=0;
while((to[i] = from[i]) != '\0')
++i;
}
习题:
/*习题说“使之可以打印任意长度的输入行的长度”,但我看它的答案还是限制最大为1000的字符,怎么体现出它说的要求了?*/
//修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本
#include <stdio.h>
#define MAXLINE 1000 /*允许输入行的最大长度*/ /*已经限制最大为1000,怎么可能任意输出长度?*/
int getline(char s[],int lim);
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)
{
printf("%d, %s",len,line);
if(len > max)
{
max = len;
copy(longest,line);
}
}
if(max > 0)
printf("%s",longest);
return 0;
}
int getline(char s[],int lim)
{
int c,i,j;
j = 0;
for(i=0; (c=getchar()) != EOF && c != '\n'; ++i)
if(i < lim - 2) /*这里写的是lim-2,似乎更合理*/
{
s[j] = c;
++j;
}
if(c == '\n')
{
s[j] = c;
++j;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[],char from[])
{
int i;
i=0;
while((to[i] = from[i]) != '\0')
++i;
}
int getline(char s[],int lim)
{
int c,i;
for(i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if(c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
for(i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)
s[i] = c;//for因为他没加{}所以循环只执行for的下面一个语句 所以那个if不在循环的范畴里
if(c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
#define MAXLINE 1000 //首先说一下 这个任意长度其实都有确切的数的 只是大概的说一下就是任意长度 LZ不用深究它
for(i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)//这里的循环是从0-998 当i=999的时候就退出循环
//因for中的判断顺序是
i<lim-1 && (c=getchar()) != EOF && c != '\n' 所以C保留的应该还是i=998的数据 所以if 998==‘\n’ 那么就给999的数据赋值'\0'