【发布时间】:2014-01-15 17:28:04
【问题描述】:
我想用结构创建一个函数来简化有理数,
一个成员是分子(int),另一个是分母(int),但程序卡在输入!
我知道 scanf() 有点冒险,但我认为它只是几个整数!
#include <stdio.h>
#include <stdlib.h>
typedef struct rational{
int num;
int den;
}rational;
rational makerational(int num,int den);
void printrational(rational r);
int main()
{
int a,b;
printf("\n\n Input integers for fraction:");
scanf(" %d%d",&a,&b);
printrational(makerational(a,b));
}
rational makerational(int a,int b){
int live=1;
rational r;
r.num=a;
r.den=b;
while(live){
if(!(r.num%2 && r.den%2)){
r.num/=2;
r.den/=2;
}else if(!(r.num%3 && r.den%3)){
r.num/=3;
r.den/=3;
}else if(!(r.num%5 && r.den%5)){
r.num/=5;
r.den/=5;
}else if(!(r.num%7 && r.den%7)){
r.num/=7;
r.den/=7;
}else live--;
}
return r;
}
void printrational(rational r){
printf("\nFRACTION -> %d/%d\n",r.num,r.den);
}
【问题讨论】:
-
您提供什么输入?例如,如果您提供
2 3,程序将运行。我认为对于您的输入,您正在进入一个无限循环。做一些调试!每次循环打印 r.num 和 r.den 的值/ -
如果我使用 7 10 或 8 20
-
请停止使用制表符来缩进(并且只使用空格);它会导致这里和其他地方一团糟。
-
为什么是inf循环?如果模不是 0 , !(1&&1)=0 对吗?
-
@meaning-matters ok 我应该按空格 2-4 次每个嵌套命令来缩进吗? (有点不切实际)
标签: c struct scanf modulo rational-numbers