主题:C语言
316971451
[专家分:30] 发布于 2011-03-23 17:25:00
②以下程序从所读入的若干字符中,找出一个最大的串,并输出该串,用”****”作为结束标记,请帮我检查啊程序。
#include <stdio.h>
#include <string.h>
void reading(char (*a)[5], int *num);
char findmax(char (*a)[5],int num);
void main()
{
char ss[10][5],ps;
int n;
reading(ss,&n);
ps=findmax(ss,n);
printf("max=%s\n",ps);
}
void reading(char (*a)[5], int *num)
{
int i=0;
gets(a[i]);
while(strcmp(a[i],"****")!=0)
{
i++;
gets(a[i]);
}
*num=i;
}
char findmax(char (*a)[5],int num)
{
char *max;
int i;
for (max=a[0],i=1;i<num;i++)
if(strcmp(a[i],max)>0)
max=a[i];
return *max;
}
回复列表 (共15个回复)
沙发
windy0will [专家分:2300] 发布于 2011-03-23 18:00:00
没仔细看,大致有这些错误:
<1> char findmax(char (*a)[5],int num);
ps=findmax(ss,n);
printf("max=%s\n",ps);//findmax返回的是char类型,怎么能用%s输出呢??
板凳
fragileeye [专家分:1990] 发布于 2011-03-23 19:50:00
首先说说ls指出的问题,声明时改为 char *findmax(char (*a)[5],int num); 该函数return时改为
return max。。
顺便提下个人的意见:
①ss[10][5],而
while(strcmp(a[i],"****")!=0)
{
i++;
gets(a[i]);
}
难道不怕溢出?
② 函数void reading(char (*a)[5], int *num),指针num没有初始化额、、
如果lz在练习使用指针,可以试着这么写,如果明确了所需,尽量不要这么写啊、、
3 楼
316971451 [专家分:30] 发布于 2011-03-24 07:52:00
这个可以用啊 并比一定只用%C
4 楼
316971451 [专家分:30] 发布于 2011-03-24 07:54:00
额 我发现这个我问题是现在第一个函数里的返回的N不能传递到第二个中的NUM中,而构成了死循环,你帮忙把这弄下,啊 呵呵 谢拉[em2]
5 楼
fragileeye [专家分:1990] 发布于 2011-03-24 09:25:00
我的上一个回帖有个错误:照你的意思,int *num = &n,也算初始化了,至于这么写我就不吹毛求疵了。
lz贴上改后的代码 和问题吧,好知道什么错误。
6 楼
316971451 [专家分:30] 发布于 2011-03-24 12:37:00
问题是没有 就是不运行 我最后发现他那比较时进入了死循环,不信你试下嘛。。。好像是第一个 *num=i;传回&n ,然后在最后一个
findmax(char (*a)[5],int num) 再传回来n
中用i<n控制比较次数 好像是这问题。第二次没有传回来n的值 所以一直无法结束,如果给一个确定的值 他就正确了 。。。。你看下
7 楼
316971451 [专家分:30] 发布于 2011-03-24 12:53:00
额 不管咋样 你帮我改下 大体一样就好 要能运行啊 谢谢
8 楼
fragileeye [专家分:1990] 发布于 2011-03-24 16:06:00
忘给你指出定义时char *ps这个错误了。。改下就ok了……
9 楼
316971451 [专家分:30] 发布于 2011-03-26 09:50:00
不是吧》???/你看我返回的就是字符串 干嘛要*ps
10 楼
fragileeye [专家分:1990] 发布于 2011-03-26 11:51:00
你知道返回的是字符串撒。那你定义时肯定用 char *ps啊;lz见过char ps = "abc";这种用法么?
我来回复