搜索
查看: 3613|回复: 11
打印 上一主题 下一主题

自学指针函数调用的例子,啊哈C编译失败,跪求详解!

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-14 16:41:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 嗨,强哥! 于 2013-7-15 08:14 编辑

#include <stdio.h>
#include <stdlib.h>
#include <string.h>  /*程序中使用了求字符串长度的系统函数*/

/*求字符数组a的前n个字符中最大字符的地址的函数*/
char *max_char(a,n)    /*函数名前有*,表示该函数是指针型函数*/
char a[];
int n;
{
    int i;
    char max_c,*p;
    max_c=a[0],p=a;
    for(i=0;i<n;i++)
        if (max_c<a
)
        {
            max_c=a
;
            p=&a
;
        }
    return(p);
}

/*调用上面的函数,求字符数组中的最大字符和前一半字符中的最大字符*/
int main()
{
    int n;
    char b[80],*p;
    sanf("%s",b);
    n=strlen(b);
    p=max_char(b,n);
    printf("max_char: %c\n",*p);
    p=max_char(b,n/2);
    printf("max_char: %c\n",*p);   

    system("pause");
    return 0;
}



最佳答案

查看完整内容

sanf("%s",b); -> 你看的是多少年前的C教科书?这种写法从20多年以前就废弃了⋯⋯i
沙发
发表于 2013-7-14 16:41:33 | 只看该作者
本帖最后由 rosynirvana 于 2013-7-15 14:32 编辑

sanf("%s",b); ->
  1. scanf("%79s",b);
复制代码
char *max_char(a,n)   
char a[];
int n;

你看的是多少年前的C教科书?这种写法从20多年以前就废弃了⋯⋯
  1. char* max_char(char* a, int n)
  2. {
  3.     int max = 0;
  4.     int i;
  5.     for(i=1; i<=n; ++i)
  6.         if(a[i] > a[max])
  7.             max=i
  8.     return &a[max];
  9. }
复制代码
i<n和i<=n取决于你的设计,在main里面你把strlen的返回值传进去,那么应该是i<=n

点评

竟然忽视了你的错误提醒,呵呵,惭愧!  发表于 2013-7-15 14:58
您的函数代码少,直接返回地址,一个&解决问题!  发表于 2013-7-15 14:20
板凳
 楼主| 发表于 2013-7-15 07:47:33 | 只看该作者
rosynirvana 发表于 2013-7-14 17:16
sanf("%s",b); ->
你看的是多少年前的C教科书?这种写法从20多年以前就废弃了……i

感谢您的指导,先回复您的第一个问题,再慢慢琢磨您的代码。
我现在看的是1999.8出版的由迟成文主编的《高级语言程序设计》,我拿的是亲戚的旧书。
我很喜欢C的编程的风格和思想,所以作为业余兴趣爱好在学。(注,以前也自学过vfp,所以有比较)
还请您推荐几本经典、实用的C教材。再次感谢您的回复及指导。
地板
 楼主| 发表于 2013-7-15 08:02:34 | 只看该作者
rosynirvana 发表于 2013-7-14 17:16
sanf("%s",b); ->
你看的是多少年前的C教科书?这种写法从20多年以前就废弃了……i

还是悲剧,编译没有通过。
5#
 楼主| 发表于 2013-7-15 08:08:34 | 只看该作者
rosynirvana 发表于 2013-7-14 17:16
sanf("%s",b); ->
你看的是多少年前的C教科书?这种写法从20多年以前就废弃了……i


还请您看看,拜托了。{:soso_e181:}
6#
发表于 2013-7-15 13:28:11 | 只看该作者
嗨,强哥! 发表于 2013-7-15 08:08
还请您看看,拜托了。

你没改scanf那行啊,我前面写了的
首先函数名是scanf而不是sanf
然后你要放到一个char[80]里,那么长度限制是79
所以就是
scanf("%79s", b);

点评

自己的一点疏忽,给您天麻烦了。  发表于 2013-7-15 15:08
一点点的疏漏害死我了,我从逻辑及语言方面检查认为是正确的,没有检查关键字,下次一定要逐个去检查了,万分感谢您的指导。O(∩_∩)O谢谢!  发表于 2013-7-15 14:23
7#
发表于 2013-7-15 13:39:00 | 只看该作者
嗨,强哥! 发表于 2013-7-15 07:47
感谢您的指导,先回复您的第一个问题,再慢慢琢磨您的代码。
我现在看的是1999.8出版的由迟成文主编的《 ...

C语言自身看K&R和C和指针比较好
如果看不懂可以去看The C Book或者C语言程序设计现代方法
国内的书没必要看,陈旧内容太多,比如那本99年的书,ansi标准确立10年了,中国的国家标准也5年了,它还在讲标准前的老东西⋯⋯

点评

学习C语言一直是我的业余爱好,是要花点钱去淘好书了。 谢谢您的推荐。  发表于 2013-7-15 14:25
8#
发表于 2013-7-15 14:34:00 | 只看该作者
我发现自己写错了一点,直接在2楼编辑了,please check it again

点评

自增吧?呵呵,当时我也发现了,以为是自己错了,呵呵。  发表于 2013-7-15 15:01
9#
发表于 2013-7-15 15:19:18 | 只看该作者
自增?不是
是返回局部变量的地址⋯⋯

点评

谢谢指教,已经发现您的改动地方。  发表于 2013-7-15 15:40
10#
发表于 2013-7-20 19:03:51 | 只看该作者
{:soso_e142:}
11#
发表于 2013-8-27 06:57:46 | 只看该作者
{:soso_e113:}终于看的明白了
12#
 楼主| 发表于 2014-7-22 10:50:38 | 只看该作者
rosynirvana 发表于 2013-7-15 15:19
自增?不是
是返回局部变量的地址……

今天翻阅了下以前的帖子,把上面的代码修改了下,第一个版本是按书上的例题修改的,第二个是按照你的代码修改的。都能正确运行。
不过还是你的代码简洁明了。

我现在基本上把C语言教科书上的所有章节都看了一遍,觉得以前的列子现在基本上没有多大压力了。下一步准备看看链表和算法。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表