搜索
查看: 1553|回复: 20
打印 上一主题 下一主题

请问为什么编译不了?

[复制链接]
跳转到指定楼层
#
发表于 2014-4-20 16:52:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
#define MAXELS 14
int main()
{
        void remove(char [],char);
    char message[MAXELS]="HappyHolidays";
    char aph='H';
    int i;
    printf("%s",message);
    system("pause");
    return 0;
}

20#
 楼主| 发表于 2014-4-21 17:37:44 | 只看该作者
rosynirvana 发表于 2014-4-21 17:28
你忘了最后的休止字符'\0'了吧

好像是啊!好了,谢谢你!
19#
发表于 2014-4-21 17:28:34 | 只看该作者
忆中寻思 发表于 2014-4-21 17:16
message长度为什么不是14?

你忘了最后的休止字符'\0'了吧
18#
 楼主| 发表于 2014-4-21 17:16:24 | 只看该作者
rosynirvana 发表于 2014-4-20 23:44
首先,函数声明写在某个函数之类是蹩脚的写法
所有函数声明都应该写在全局作用域中

message长度为什么不是14?
17#
发表于 2014-4-20 23:44:44 | 只看该作者
本帖最后由 rosynirvana 于 2014-4-20 23:51 编辑

首先,函数声明写在某个函数之类是蹩脚的写法
所有函数声明都应该写在全局作用域中

MAXELS宏没必要,整个代码就这一个长度,而且这个MAXELS宏和message数组长度还不一样(message长度是15)

如果严格遵照C90标准,那么函数内的声明必须写在statement之前,不能在后面写int i;
用printf逐个输出字符数组的每个字符是很低效的做法,输出字符串应该直接用puts

另外remove_char的实现不正确
16#
发表于 2014-4-20 23:37:27 | 只看该作者
本帖最后由 rosynirvana 于 2014-4-20 23:39 编辑

如果只是要通过编译,那么把函数改个名就行
remove_char之类的
其他问题还有很多

15#
 楼主| 发表于 2014-4-20 23:28:49 | 只看该作者

这个程序是用要求册除字符'H"

本帖最后由 rosynirvana 于 2014-4-20 23:32 编辑
rosynirvana 发表于 2014-4-20 23:08
你这段代码里又没有remove这个函数
如果其他地方有,那要改个名字,不能用remove这个名字

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXELS 14
  4. int main()
  5. {
  6.         void remove(char [],char);
  7.         char message[]="HappyHolidays\n";
  8.         char delh='H';
  9.         printf("%s",message);
  10.         remove(message,delh);
  11.         int i;
  12.         for(i=0;i<MAXELS;i++)
  13.         {
  14.                 printf("%c",message[i]);
  15.         }
  16.         system("pause");
  17.         return 0;
  18. }
  19. void remove(char *message,char delh)
  20. {
  21.         char *a=message;
  22.         while(*message++)
  23.         {
  24.                 if(*message++==delh)
  25.                 ;
  26.                 else
  27.                 *a++=*message++;
  28.                
  29.                  
  30.                
  31.         }
  32. }
复制代码



14#
发表于 2014-4-20 23:08:16 | 只看该作者
忆中寻思 发表于 2014-4-20 23:03
我这个是一个函数原型来的。怎么可以删去呢?

你这段代码里又没有remove这个函数
如果其他地方有,那要改个名字,不能用remove这个名字

或者你把完整代码贴上来?
13#
 楼主| 发表于 2014-4-20 23:03:36 | 只看该作者
我这个是一个函数原型来的。怎么可以删去呢?
12#
发表于 2014-4-20 22:59:10 | 只看该作者
忆中寻思 发表于 2014-4-20 22:55
不好意思,打错一个字,是删除不会对输出/输入有影响吗?

我说的是删除你写的 void remove(char[], char);
为啥会对输入输出有影响?
11#
 楼主| 发表于 2014-4-20 22:55:04 | 只看该作者
不好意思,打错一个字,是删除不会对输出/输入有影响吗?
10#
发表于 2014-4-20 22:46:22 | 只看该作者
忆中寻思 发表于 2014-4-20 22:38
请问如何注释掉?删除不用有影响吗?
  1. // void remove(char*, char);
复制代码

或者
  1. /* void remove(char*, char);  */
复制代码


编译器就会认为它是注释,是给程序员看的,就会直接跳过不处理了
不过这里是和标准库里的函数冲突,直接删掉就可以了

删掉不用是指什么?
9#
 楼主| 发表于 2014-4-20 22:38:19 | 只看该作者
rosynirvana 发表于 2014-4-20 17:59
好好看编译器给出的提示

你写了个声明void remove(char*, char);

请问如何注释掉?删除不用有影响吗?
8#
 楼主| 发表于 2014-4-20 22:15:36 | 只看该作者
李掌柜 发表于 2014-4-20 17:18
你这段代码这几句好像是多余的吧?

嗯,是多余的!
7#
发表于 2014-4-20 21:44:50 | 只看该作者
愛情風華 发表于 2014-4-20 18:12
可以請問一下這句#define MAXELS 14  是何作用?

就是在编译“之前”,把代码里所有的MAXELS用14替换
6#
发表于 2014-4-20 19:11:59 | 只看该作者
你这第一行什么意思,不懂
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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