| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 554 人关注过本帖, 1 人收藏
标题:帮忙看一下,为啥结构体里的数值传递不过去,谢谢。
只看楼主 加入收藏
winglesswu
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2013-1-28
结帖率:71.88%
收藏(1)
已结贴  问题点数:15 回复次数:6 
帮忙看一下,为啥结构体里的数值传递不过去,谢谢。
程序要求输入两个整形变量,分别是分子(Numerator)和分母(Denominator),通过void enter(struct Fraction *fraction); void simplify(struct Fraction *fraction); void display(struct Fraction fraction);这三个函数实现输入,简化(2/8变成1/4)和输出。本人调试了很久都只输出原来输入的结果。比如2,8(结果是2/8),4, -16(应该是-1/4, 输出结果是4/-16)。 下面是三个文件(无需main.h即可编译),请大家指点一下,谢谢。
// w2.cpp
 #include <iostream>
 using namespace std;
 #include "Fraction.h"

 int main() {
     struct Fraction fraction;

     cout << "Fraction Simplifier" << endl;
     cout << "===================" << endl;

     enter(&fraction);
     simplify(&fraction);
     display(fraction);
 }

//Fraction.h
struct Fraction{
 int num;
 int den;
};

void enter(struct Fraction *fraction);
void simplify(struct Fraction *fraction);
void display(struct Fraction fraction);

//Fraction.cpp
#include <iostream>
using namespace std;
#include "Fraction.h"
void enter(struct Fraction *fraction)
    {
    cout << "Numerator: "<< endl;
    cin>>fraction->num;
    cout << "Denominator: "<< endl;
    cin>>fraction->den;
    if (fraction->den==0)
      {
       cout << "Denominator (not zero): "<< endl;
       cin>>fraction->den;
       }
    }

void simplify(struct Fraction* fraction)
    {
    int i;   
    if ((fraction->num>0 && fraction->den>0) || (fraction->num>0 && fraction->den<0)) //ex. 2/4 or 2/-4
    {
     for (i=fraction->num; i>0; i--)
       {
        if (fraction->den>0)
        {
        if (fraction->num%i==0 && fraction->den%i==0)
            {
            fraction->num==fraction->num/i;
            fraction->den==fraction->den/i;
            }
        }
        else
           {
               if (fraction->num%i==0 && fraction->den%i==0)
                  {
                   fraction->num==-1*(fraction->num/i);
                   fraction->den==-1*(fraction->den/i);
                  }
           }
       }
     }
     else if ((fraction->num<0 && fraction->den>0) || (fraction->num<0 && fraction->den<0))//ex. -2/4 or -2/-4
     {
       for (i=fraction->num; i<0; i++)
       {
        if (fraction->den<0)
        {
           if (fraction->num%i==0 && fraction->den%i==0)
              {
               fraction->num==fraction->num/i;
               fraction->den==fraction->den/i;
               }
         }
        else
         {
            if (fraction->num%i==0 && fraction->den%i==0)
               {
                fraction->num==-1*(fraction->num/i);
                fraction->den==-1*(fraction->den/i);
                }
         }
        }   
      }
    }

void display(struct Fraction fraction)
    {
    cout<<endl;
    if (fraction.num==0)
        cout<<"0"<<endl;
    else
        cout<<fraction.num<<"/"<<fraction.den<<endl;
    }
搜索更多相关主题的帖子: void display include 结构体 
2013-05-25 03:54
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:8 
fraction->num==fraction->num/i;
                    fraction->den==fraction->den/i;

你的编译器就没发出任何警告?
你完全不看编译器提示的?
你完全不知道什么叫调试?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-05-25 09:28
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:8 
呵呵,人家批评了,你好好看下

Maybe
2013-05-25 16:51
winglesswu
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2013-1-28
收藏
得分:0 
用visual studio, 没警告。我自己修好了。谢谢。
2013-05-26 23:43
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
你用的vs版本多少?
我从VS2005一直测到2010
都是有警告的
GCC更不用说了,也是警告一片

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-05-27 10:30
ydown
Rank: 2
等 级:论坛游民
帖 子:31
专家分:92
注 册:2013-5-27
收藏
得分:0 
LZ这个是我改的程序,已经调试过了,结果是可以的,希望大家指出不足之处,代码如下:

// w2.cpp
#include <iostream>
using namespace std;
#include "Fraction.h"

int main() {
     struct Fraction fraction;

     cout << "Fraction Simplifier" << endl;
     cout << "===================" << endl;

     enter(&fraction);
     simplify(&fraction);
     display(fraction);
}

//Fraction.h
struct Fraction{
int num;
int den;
};

void enter(struct Fraction *fraction);
void simplify(struct Fraction *fraction);
void display(struct Fraction fraction);


//fraction.cpp
#include <iostream>
using namespace std;
#include "fraction.h"
void enter(struct Fraction*fraction)
{
    cout<<"Numertor:"<<endl;
    cin>>fraction->num;
    cout<<"Denominator:"<<endl;
    cin>>fraction->den;
    do{
        if (fraction->den==0)
        {
            cout<<"Denominator (not zero):"<<endl;
            cin>>fraction->den;
        }
    }while(fraction->den==0);//分母不能为0
}

void simplify(struct Fraction*fraction)
{
    int i;
    int j=1;        //定义j为最大公约数
    int minNum;    //分子、分母中最小的那个数值(绝对值)
    if (abs(fraction->num)>abs(fraction->den))
    {
        minNum=abs(fraction->den);
    }
    else
    {
        minNum=abs(fraction->num);
    }
    if(minNum==0)
    {
        j=0;//分子为0
    }
    else{
        for (i=minNum;i>0;i--)
        {
            if (fraction->den%i==0&&fraction->num%i==0)
            {
                j=i;
                break;
            }
        }
    }
    if (j!=0)        //分子不为0的时候,求出最大公约数,并化简.
    {
        if (fraction->den<0 && fraction->num>0)    //当结果为负时,只在分子前面加负号
        {
            fraction->num=-1*fraction->num/j;   
            fraction->den=-1*fraction->den/j;
        }
        else
        {
            fraction->num=fraction->num/j;
            fraction->den=fraction->den/j;
        }
    }
}


void display(struct Fraction*fraction)
{
    cout<<"----====Result====----"<<endl;
    if (fraction->num==0)    //分子为0,直接输出0
    {
        cout<<"0"<<endl;
    }
    else if (fraction->den==1)    //分母为1,直接输出分子
    {
        cout<<fraction->num<<endl;
    }
    else
    {
        cout<<fraction->num<<"/"<<fraction->den<<endl;
    }
}

[ 本帖最后由 ydown 于 2013-5-28 11:44 编辑 ]
2013-05-28 11:40
快速回复:帮忙看一下,为啥结构体里的数值传递不过去,谢谢。
数据加载中...
 
   



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

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