免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1236 | 回复: 6
打印 上一主题 下一主题

请大家帮我看看,这个程序问题出在哪里? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-08 03:50 |只看该作者 |倒序浏览
很简单的一个小程序,可是执行的时候有段错误,我不明白问题出在哪里?
请大家帮忙看看,谢谢了!

#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

const int BASE=16;
const char HEXA[BASE]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

int saisir ()
{
        int i;
        cout <<"请输入一个0到10000之间的数. " <<endl;
        do
        {
                cin >>i;
        }
        while ((i<0)||(i>10000));
       
        return i;
}

void affiche (char *&chainee)
{
        for (int i=0;i<strlen(chainee)-1;i++)
                cout <<chainee;
}

void conversion (int nombre,char *&chainee)
{
        int iIndice=0;
       
        do
        {
                chainee[iIndice]=HEXA[nombre%BASE];
                nombre/=BASE;
                iIndice++;
        }
        while (nombre!=0);

        chainee[iIndice]='\0';
}

void inverse (char *&chainee)
{
        char *inverse;
        int n=strlen(chainee);
        inverse=new char[n];
        for (int i=0;i<n-1;i++)
        {
                inverse[n-1-i]=chainee;
                cout <<inverse[n-1-i];
        }
        inverse[n]='\0';
        chainee=inverse;
        delete[] inverse;
}

int main()
{
        int nombre;
        char *liste;
       
        liste=new char[5];
        nombre=saisir();
        conversion(nombre,liste);
        inverse(liste);
        cout <<nombre <<"=" ;
        affiche(liste);
        cout <<endl;
        delete[] liste;

        return 0;
}

[ 本帖最后由 clwwy 于 2006-1-8 17:42 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-01-08 10:42 |只看该作者
段错误那大概就是内存出错了,别告诉我编译出来有段错误,什么叫编译出来?

还是要学习一点调试技术的。
这么简单的程序

论坛徽章:
0
3 [报告]
发表于 2006-01-10 00:19 |只看该作者

回复 2楼 jeffshia 的帖子

自己顶一下

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-01-10 01:26 |只看该作者
  1. void affiche (char *&chainee)
  2. {
  3.         for (int i=0;i<strlen(chainee);i++)
  4.                 cout <<chainee;
  5. }
复制代码

  1. void inverse (char *&chainee)
  2. {
  3.         char *inverse;
  4.         int n=strlen(chainee);
  5.         inverse=new char[n];
  6.         for (int i=0;i<n;i++)
  7.         {
  8.                 inverse[n-1-i]=chainee;
  9.                 cout <<inverse[n-1-i];
  10.         }
  11.         inverse[n]='\0';
  12.         for (int i=0;i<n;i++)
  13.                chainee[i] = inverse[i];
  14.         delete[] inverse;
  15. }
复制代码


仔细看一下区别。
还有这代码水平的确有点

论坛徽章:
0
5 [报告]
发表于 2006-01-10 03:51 |只看该作者

回复 4楼 lenovo 的帖子

不好意思,刚刚在学C++,还是个新手,当然不能跟lenovo你比的咯。让lenovo见笑了。
后来我自己搞定了。

我还有个问题,我不知道下面这段打印的代码有什么错:
void Affiche(jeu *pJeu)
{
        cout <<"( ";
        while (pJeu->pPremier!=NULL)
        {
                cout <<pJeu->pPremier->iNbcartes <<" ";
                pJeu->pPremier=pJeu->pPremier->suivant;
        }
        cout <<")" <<endl;
}
为什么编译的时候计算机说:implicit declaration of function 'int Affiche(...)' ?
后来我改成int Affiche()之后编译就通过了,可我不知道为什么一定要有返回值,请lenovo提点我一下,谢谢了。

[ 本帖最后由 clwwy 于 2006-1-10 03:52 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-01-10 12:17 |只看该作者
你编译你给出来得那个程序也报这个错误吗?
如果不报,那就自己找下原因吧。
编译器都提示你了。

论坛徽章:
0
7 [报告]
发表于 2006-01-10 19:11 |只看该作者

回复 6楼 lenovo 的帖子

我只是把void Affiche()这个函数改成了int Affiche()就通过了编译(其实就只是在函数的最后加上了返回值而已),可我不知道一个打印的函数这里为什么一定要有返回值?以前也从来没碰到过这种情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP