c++-这个程序问题出在哪呢?没有编译错误,但运行乱码。。是主函数的问题吗?

问题描述

这个程序问题出在哪呢?没有编译错误,但运行乱码。。是主函数的问题吗?

#include
using namespace std;
class zrf_Ratio
{
public:
zrf_Ratio(){}
zrf_Ratio(int r1,int r2):num(r1),den(r2){}
zrf_Ratio f1(zrf_Ratio& z)
{
int r,m=z.num,n=z.den;
while(r=z.num%z.den)
{
z.num=z.den;
z.den=r;
}
r=z.den;
z.num=m/r;
z.den=n/r;
return z;
}
friend ostream& operator<<(ostream& ostr, const zrf_Ratio& r)
{ return ostr << r.num << "/" << r.den;}

zrf_Ratio& operator=(const zrf_Ratio& z1)
{
    zrf_Ratio a;
    return a.f1(zrf_Ratio(num+z1.num,den+z1.den));
}

zrf_Ratio& operator*=(const zrf_Ratio& z2)
{
    zrf_Ratio a;
    return a.f1(zrf_Ratio(z2.num*z2.den,z2.den+z2.den));
}

zrf_Ratio& operator++()
{
    num++;
    den++;
    return *this;
}

zrf_Ratio operator++(int)
{
        zrf_Ratio a;
        a=*this;
        ++ * this;
        return a;
}

private:
int num,den;
};
int main()
{
zrf_Ratio x(2,7),y(3,5),z;
z=x.operator=(y);
cout<<"x=(y)="<<z<<endl;
z=x*=(y);
cout<<"x*=(y)="<<z<<endl;
z++;
cout<<"z="<<z<<endl;
++z;
cout<<"z="<<z<<endl;
return 0;
}

解决方案

运行乱码,是因为你代码访问的字符等编码是不是没有处理好

解决方案二:

++ * this; 这句不对吧,this 指针自加一后指向哪里呢?不能这样改变 this 指针的值。

解决方案三:

    zrf_Ratio(int r1,int r2):num(r1),den(r2){}

这句什么意思?

解决方案四:

++ * this 有问题,不能这么写。

解决方案五:

    #include <iostream>
    using namespace std;

    class zrf_Ratio
    {
        public:
            zrf_Ratio(){}
            zrf_Ratio(int r1,int r2):num(r1),den(r2){}
            zrf_Ratio& f1(zrf_Ratio& z)
            {
                cout<<"DEBUG:f1("<<z.num<<"/"<<z.den<<")"<<endl;
                int r,m=z.num,n=z.den;
                while(r=z.num%z.den)
                {
                    z.num=z.den;
                    z.den=r;
                }
                r=z.den;
                z.num=m/r;
                z.den=n/r;
                return z;
            }
            void print()
            {
                printf("%d/%dn", num, den);
            }
            friend ostream& operator<<(ostream& ostr, const zrf_Ratio& r)
            { return ostr << r.num << "/" << r.den;}

            /*
            zrf_Ratio operator=(const zrf_Ratio& z1)
            {
                zrf_Ratio a;
                return a.f1(zrf_Ratio(num+z1.num,den+z1.den));
            }
            */
            zrf_Ratio& operator*=(const zrf_Ratio& z2)
            {
                zrf_Ratio a;
                return a.f1(zrf_Ratio(z2.num*z2.den,z2.den+z2.den));
            }

            zrf_Ratio& operator++()
            {
                ++num;
                ++den;
                return *this;
            }

            const zrf_Ratio operator++(int)
            {
                    zrf_Ratio a(*this);
                    ++ (*this);
                    return a;
            }
        private:
            int num,den;
    };

    int main()
    {
        zrf_Ratio x(2,7),y(3,5),z;
        /*
        z=x.operator=(y);
        cout<<"x=(y)="<<z<<endl;
        */
        cout<<"x="<<x<<endl;
        cout<<"y="<<y<<endl;
        z=x*=(y);
        cout<<"x*=(y)="<<z<<endl;

        cout<<"z++="<<z++<<endl;
        cout<<"z="<<z<<endl;

        cout<<"++z="<<++z<<endl;
        cout<<"z="<<z<<endl;
        return 0;
    }

错误原因是你重载了=,导致给z赋值还是要调用重载,所以只有++自运算才是正确的。
去掉后输出就正常了。

    x=2/7
    y=3/5
    DEBUG:f1(15/10)
    x*=(y)=3/2
    z++=3/2
    z=4/3
    ++z=5/4
    z=5/4
    Press any key to continue

解决方案六:

乱码的话,你改一下你文件的编码方式试试

时间: 2024-10-02 01:17:46

c++-这个程序问题出在哪呢?没有编译错误,但运行乱码。。是主函数的问题吗?的相关文章

gcc编译C程序出现”error conflicting types for function”编译错误的分析解决

在使用gcc编译C程序时,有时会碰到"error: conflicting types for 'function'"的编译错误.从字面意义上理解,是说函数的定义和声明不一致.在这篇文章里,我就对这个错误做个简单的分析(使用的gcc版本是4.9.0). (一)首先我们看一个函数的定义和声明不一致的例子: #include <stdio.h> int func(int a); int func(void) {     return 0; } int main(void) {

压缩感知-下面的CS程序哪里出问题了

问题描述 下面的CS程序哪里出问题了 N=256; %信号长度 f1=50; %信号频率1 f2=100;%信号频率2 fs=800;%采样频率 ts=1/fs;%采样间隔 Ts=1:N;%采样序列 x=0.3*cos(2*pi*f1*Ts*ts)+0.6*cos(2*pi*f2*Ts*ts) fftx=fft(x); k=4; n=length(x) m=30; %产生一个随机的稀疏信号 x=2*(rand(1,n)-0.5); x_sparse=rand(1,n); x(x_sparse<0

Win9x下隐藏程序不出现在CTRL+ALT+DEL对话框中

Windows95/98下怎样隐藏应用程序不让它出现在CTRL-ALT-DEL对话框中? 把你的应用程序从CTRL-ALT-DEL对话框中隐藏的一个简单办法是去应用程序的标题.如果一个程序的主窗口没以标题,Windows95不把它放到CTRL-ALT-DEL对话框中.清除标题属性的最好地方是在WinMain函数里. WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ try {  Application->Title = "";  

Win7系统打开程序弹出乱码记事本怎么解决?

Win7系统打开程序弹出乱码记事本怎么解决? 解决方法: 1.打开360等安全杀毒软件,点击闪电杀毒; 2.再点击全盘扫描,如下图所示:从下图可以看出,我的电脑前21分钟360修复两个系统安全问题; 3.等待一段时间,重启电脑,在打开网页.QQ及运行命令就不会弹出乱码记事本问题了,比如,在运行窗口输入:CMD就不会出现乱码记事本问题了. 注意:扫描完后一定要点立即处理并重启电脑.  

win8运行应用程序弹出“应用程序无法启动(0x00000XX) ”如何解决

  win8运行应用程序弹出"应用程序无法启动(0x00000XX) "如何解决         具体步骤: 1.下载DirectX Repair3.3,并将其解压出来; 2.打开"DirectX Repair",点击[检测并修复]右侧的小三角,勾选"同时更新c++"; 3.点击[检测并修复],修复工具开始自动运行; 4.修复完成后点击退出,并且重启算计即可解决应用程序出错的问题.

求专业人士看这个程序问题出在哪?

问题描述 求专业人士看这个程序问题出在哪? import java.io.*;import java.net.*;public class Sb{ public static void main(String[] args){ String m1m2; m1=""222.22.125.142""; m2=""""; try{ //创建连接到服务器的Socket对象 while(!m2.equals(""en

c语言-运行程序,出黑框了,但是输入后没有结果

问题描述 运行程序,出黑框了,但是输入后没有结果 用递归算法求一个数的平方根的近似值,出现黑框,但输入a的值后,没有运行下面的东西,直接结束了.哪里错了啊,求助! 解决方案 首先,mysqrt()没有返回类型声明,很好奇你居然可以编译通过.其次,你在mysqrt里无限递归调用自身,没有出口,最后会overflow. 解决方案二: 把代码贴过来,方便别人给你找错. 你输入什么了? 解决方案三: http://zhidao.baidu.com/link?url=keZMPv9RTrsjcb_5EEo

数据结构 单链表-帮我看看下面的程序哪里出错了,刚从数据结构学的单链表,运行不了

问题描述 帮我看看下面的程序哪里出错了,刚从数据结构学的单链表,运行不了 就简单的取值 插入 删除 合并 #include #include #include typedef struct LNode { int num; struct LNode *next; }LNode,*LinkList; void InitiList(LinkList L) { L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; } void LocateElem(Link

串口通信-51单片机串口发送字符串给电脑 自己写了程序但出不了结果

问题描述 51单片机串口发送字符串给电脑 自己写了程序但出不了结果 #include unsigned char code L1[] = "123456789"; unsigned char code L2[] = "12345678"; void delay(void) { unsigned char n,m; for(m=0;m<200;m++) for(n=0;n<250;n++); } void send_str() { unsigned i =