| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 402 人关注过本帖
标题:这个错在哪里??
只看楼主 加入收藏
施熠
Rank: 2
来 自:南京
等 级:论坛游民
帖 子:69
专家分:29
注 册:2012-2-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
这个错在哪里??
#include "stdio.h"
void printchars(char,int);
void mian()
{
    int i;
    for(i=1;i<=20;i++)
    {
        printchars(" ",20+i);
        printchars("*",2*(21-i)-i);
        printf("\n");
    }
}
void printchars(char c,int n)
{
    int i;
    for(i=1;i<=n;i++)
    putchars(c);
}
搜索更多相关主题的帖子: void include 
2012-03-22 16:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
你好像学了不少时间,看来没什么进步。平时都学什么去了?

授人以渔,不授人以鱼。
2012-03-22 16:45
施熠
Rank: 2
来 自:南京
等 级:论坛游民
帖 子:69
专家分:29
注 册:2012-2-4
收藏
得分:0 
回复 2楼 TonyDeng
我在上学,而且不是电脑专业的,所以平时很少有太多时间去看C语言,只有在上课时,才能很好的学习C语言
2012-03-22 16:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这里有两个问题需要学习,你愿意学就照着我说的做吧:
1.编程必须一定懂得看编译报告,把编译器给你的错误信息或警告信息抄出来,教你看。
2.学会替换代码分析问题,你做完第一步后再告诉你。

授人以渔,不授人以鱼。
2012-03-22 16:52
feng1990
Rank: 2
等 级:论坛游民
帖 子:5
专家分:26
注 册:2010-8-28
收藏
得分:10 
#include "stdio.h"
void printchars(char,int);
int  main()
{
    int i;
    for(i=1;i<=20;i++)
    {
        printchars(' ',20+i);
        printchars('*',2*(21-i)-i);
        printf("\n");
    }
    return 0;
}
void printchars(char c,int n)
{
    int i;
    for(i=1;i<=n;i++)
    putchar(c);
}
2012-03-22 16:53
施熠
Rank: 2
来 自:南京
等 级:论坛游民
帖 子:69
专家分:29
注 册:2012-2-4
收藏
得分:0 
回复 4楼 TonyDeng
哦哦,我知道了。。但是,怎么替换???
2012-03-25 22:22
施熠
Rank: 2
来 自:南京
等 级:论坛游民
帖 子:69
专家分:29
注 册:2012-2-4
收藏
得分:0 
回复 5楼 feng1990
谢谢
2012-03-25 22:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用施熠在2012-3-25 22:22:59的发言:

哦哦,我知道了。。但是,怎么替换???

现在模仿编译器的操作:

首先它找到函数原型,就是如下这个
void printchars(char,int);
根据这样的声明,它知道每当要调用函数时,将依据什么来检查。

然后下面是你的调用代码:
printchars(" ",20+i);
printchars("*",2*(21-i)-i);

对每一个参数,都要比较,把" "和"*"代入到(char,int)中的char位置,很明显,函数定义指定要求char,但你传入的是字符串char*(双引号是字符串,单引号是字符),不符合要求,因此编译器拒绝这样的调用,指出错误,停止编译。这样开头错误,导致后面的一系列代码都跟着受影响,因此,后面的错误信息你基本上不用看了,先解决这个,因为后面的错误或警告信息,很可能是这个引起的。解决这个之后,后面如果还有错误或警告,就依次从前面开始解决,直到没有任何错误和警告为止。

这就类似于数学中的代入法,“代数”是代表某些实际数值,诸如F=ma这样的,表示F和ma是等价的,在出现F的地方,可以把F替换为ma。编程也一样。比如在你这个程序中,如果使用printf("%s", printchars('*', 20+i))这样的调用代码,也是如此替换,你会看到printchars()函数返回的是void,与printf()要求的char*不符,因此也是错的,如果希望要写出那样的调用代码,就必须把printchars()函数的定义写成返回char*而不是void。

授人以渔,不授人以鱼。
2012-03-25 22:36
快速回复:这个错在哪里??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057391 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved