首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-15 
关于 一行行的读取输入行,直到文件尾. 算出每行长度,然后打印最长行 的三个问题...编写一个程序,一行行的

关于 一行行的读取输入行,直到文件尾. 算出每行长度,然后打印最长行 的三个问题...
编写一个程序,一行行的读取输入行,直到文件尾. 算出每行长度,然后打印最长行,假定每行不超过1000

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

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

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


最后麻烦哪个达人帮我写个正确的程序出来. 研究了一天了 不知道怎么弄

[解决办法]
char [1000][]; ?

char [][1000]

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

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

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

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

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

 }

善后工作。。




[解决办法]
应该是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;

热点排行