关于 一行行的读取输入行,直到文件尾. 算出每行长度,然后打印最长行 的三个问题...

drizztguai 2008-02-06 04:43:20
编写一个程序,一行行的读取输入行,直到文件尾. 算出每行长度,然后打印最长行,假定每行不超过1000

迷惑1) 我的思路是构造个二维数组, 于是就想 char [1000][]; 但发现这样的话根本就不给定义,因为不确定到底有多少行...

迷惑2) 如果char a[10] 然后 给a 赋个hello 那他后面的字符全为 空格还是 为\0 ?

迷惑3)而且文件尾EOF 怎么表示呢. 用ctrl+d也不终止.


最后麻烦哪个达人帮我写个正确的程序出来. 研究了一天了 不知道怎么弄
...全文
216 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lukygt 2008-02-06
  • 打赏
  • 举报
回复
应该是char x[][1000],或者char*x[]吧
EOF好像不能直接输入
这个题其实用不着用二维数组的吧,简单的写个例子,可能有点错误,自己看下吧

#include <stdio.h>
#define MAXLINE 20
int getline(char s[], int lim);
void copy(char to[], char from[]);
int main(void)
{
char line[MAXLINE];
char longest[MAXLINE];
int len, max;
max=0;
while((len = getline(line, MAXLINE)) > 1)
if(len>max)
{
max=len;
copy(longest,line);
}
if(max>0)
printf("%s",longest);
system("pause");
return 0;
}

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;
}
else if(c == EOF && i > 0)
{
s[i] = '\n';
++i;
}
s[i] = '\0';
return i;
}

void copy(char to[], char from[])
{
int i;
i = 0;
while((to[i] = from[i]) != '\0')
++i;
}
lin_style 2008-02-06
  • 打赏
  • 举报
回复
char [1000][]; ?

char [][1000]

如果一开始不知道多长,可以试着这样做。
比如先定义10*10(行长)的长度,当用到8个时,发现还没读完,可以再扩充一点。

如果char a[10] 然后 给a 赋个hello
hello是个字符串,赋到o的时候,会加个'\0'

而且文件尾EOF 怎么表示呢.
这个忘记了。 大概是 getchar()!=EOF

不过本题可以不要分配内存数组
流程可以这样
分配足够的两段内存,用来存放从文件读的内容和最后结果
定义两个个长度变量,上一次长度和当前长度
开文件流

while(getchar()!=EOF) //好象是这样,我也忘记了。。。不对指出
{
getline();
把长度放入当前长度;
与上一次长度对比,如果大于他
1就把此次读到的长度赋给上一次,2把这行内容放到最后结果的那段内存
否则继续取

}

善后工作。。



69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧