一行行读取输入行

rzzat1478 2008-10-28 10:25:01
问题:编写一个程序,一行行的读取输入行,直到文件尾. 算出每行长度,然后打印最长行,假定每行不超过1000。
我写了一个:
#include<stdio.h>
#include<string.h>
#define M 10 /*最大行数*/
main()
{
char a[M][1000];
int i,j,maxi=0,len=0;
printf("请输入几行字符:\n");
for(i=0;i<M;i++)
{ for(j=0;((a[i][j]=getchar())!=EOF)&&(a[i][j]!='\n');j++); /*当不是换行或结尾时,长度加1*/
if(j>len){ len=j;maxi=i; }
}
printf("%s",a+len); /*输出最长行*/
system("Pause");
}

一,为什么结果没有输出?哪里有问题?
二,能不能用指针分配两块内存来处理?谁能帮我写个范例?
三,有没有能一行行读取输入的c库函数?题目中要求一行行读取,不知道该怎么办。
...全文
276 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
已经有答案了?飞雪
lbjfeng 2008-10-29
  • 打赏
  • 举报
回复
对了,加一句,如果从文件中读取一个字符的话,用fgetc
lbjfeng 2008-10-29
  • 打赏
  • 举报
回复
你写的这个相当的令我笑了。连文件都没哟,你怎么读取?
呵呵,你这个是标准输入,从键盘输入的。并且,如果你不回车,结果一定就是十行了。上面的大哥,一定都被你忽悠晕了


fgets可以实现你说的那个功能。
#include <stdio.h>

void main( void )
{
FILE *stream;
char line[100];

if( (stream = fopen( "fgets.c", "r" )) != NULL )
{
if( fgets( line, 100, stream ) == NULL)
printf( "fgets error\n" );
else
printf( "%s", line);
fclose( stream );
}
}
太乙 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 rzzat1478 的回复:]
引用 6 楼 hqin6 的回复:
二,能不能用指针分配两块内存来处理?谁能帮我写个范例?

这啥意思??

就用不用二维数组处理,用两个指针处理,我写了一个:
#include <stdio.h>
#include <string.h>
#define M 5 /*最大行数*/
main()
{
char *p,*q;
int i,len=0,t;
printf("请输入%d行字符:\n",M);
for(i=0;i <M;i++)
{ gets(p);//gets读入行
t …
[/Quote]


汗~~pq都没分配内存呢~~你这么读,肯定错了!


p = (char*)malloc(sizeof(char)*100);
q = (char*)malloc(sizeof(char)*100);

这个100自己随便设,不过大点儿好,毕竟不能预料用户输入多少嘛
最后还要free(p);free(q);
rzzat1478 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hqin6 的回复:]
二,能不能用指针分配两块内存来处理?谁能帮我写个范例?

这啥意思??
[/Quote]
就用不用二维数组处理,用两个指针处理,我写了一个:
#include <stdio.h>
#include <string.h>
#define M 5 /*最大行数*/
main()
{
char *p,*q;
int i,len=0,t;
printf("请输入%d行字符:\n",M);
for(i=0;i <M;i++)
{ gets(p);//gets读入行
t = strlen(p);
if(t>len){ len=t;q=p; }
}
printf("%s",q); /*输出最长行*/
system("Pause");
}

可是运行的时候就会出现*******内存不能为“read"的错误提示
rzzat1478 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 rzzat1478 的回复:]
2l的好像还是不对啊。。
[/Quote]
不好意思,原来要输入m行数据才会出现结果,我弄错了先。。。你那是对的,谢谢了
baihacker 2008-10-28
  • 打赏
  • 举报
回复
我发的都是在gcc下测试过的
太乙 2008-10-28
  • 打赏
  • 举报
回复
二,能不能用指针分配两块内存来处理?谁能帮我写个范例?

这啥意思??
太乙 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 rzzat1478 的回复:]
2l的好像还是不对啊。。
[/Quote]

咋不对??



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 2 /*最大行数*/
main()
{
char a[M][1000];
int i,j,maxi=0,len=0,t;
printf("请输入几行字符:\n");
for(i=0;i <M;i++)
{
gets(a[i]);//gets读入行
t = strlen(a[i]);
if(t>len){ len=t;maxi=i; }
}
printf("%s",a[maxi]); /*输出最长行*/
system("Pause");
}


rzzat1478 2008-10-28
  • 打赏
  • 举报
回复
2l的好像还是不对啊。。
rzzat1478 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
C/C++ code
printf("%s",a[maxi]); /*输出最长行*/


[/Quote]这是一个不错误,改了还是不对。。。。。
baihacker 2008-10-28
  • 打赏
  • 举报
回复
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
#define M 10 /*最大行数*/
main()
{
char a[M][1000];
int i,j,maxi=0,len=0,t;
printf("请输入几行字符:\n");
for(i=0;i <M;i++)
{ gets(a[i]);//gets读入行
t = strlen(a[i]);
if(t>len){ len=t;maxi=i; }
}
printf("%s",a[maxi]); /*输出最长行*/
system("Pause");
}
baihacker 2008-10-28
  • 打赏
  • 举报
回复
printf("%s",a[maxi]);  /*输出最长行*/ 

69,371

社区成员

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

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