【问题标题】:Why wont my while statement work?为什么我的 while 语句不起作用?
【发布时间】:2011-07-16 23:01:06
【问题描述】:

我认为我做的一切都是正确的......但显然我错过了一些东西,我的 while 语句似乎从未被输入过。请帮忙....

#include <iostream>
using namespace std;


void swap(int *aPtr, int *bPtr)
{
    int holder=0;
    holder=*aPtr;
    *aPtr=*bPtr;
    *bPtr=holder;
}
void instantiator(int *dPtr,int *xPtr,int *yPtr,int a)
{
    *dPtr=a;
    *xPtr=1;
    *yPtr=0;
}
void cruncher(int *xPtr,int *dPtr, int *aPtr,int *yPtr,int *bPtr)
{
    int x1=0,x2=1,y1=1,y2=0,r=0,q=0;
    while(*bPtr>0)
        {
            q=*aPtr/(*bPtr);
            r=*aPtr%*bPtr;
            *xPtr=x2-(q*x1);
            *yPtr=y2-(q*y1);
            *aPtr=*bPtr;
            *bPtr=r;
            x2=x1;
            x1=*xPtr;
            y2=y1;
            y1=*xPtr;
            cout<<q<<" "<<r<<" "<<*xPtr<<" "<<*yPtr<<" "<<*aPtr<<" "
                <<*bPtr<<" "<<x2<<" "<<x1<<" "<<y2<<" "<<y1<<endl;
            }
    cout<<endl;
    *dPtr=*aPtr;
    *xPtr=x2;
    *yPtr=y2;

}
int main() {
    int a=4864,b=3458,d,*aPtr,*bPtr,*dPtr,x,*xPtr,y,*yPtr;
    aPtr=&a;
    bPtr=&b;
    dPtr=&d;
    xPtr=&x;
    yPtr=&y;

    if(b=0)
        instantiator(dPtr,xPtr,yPtr,a);

    if (a<b)
        swap(aPtr,bPtr);

    cruncher(xPtr,dPtr,aPtr,yPtr,bPtr);
    cout<<d<<" "<<x<<" "<<y;


    return 0;
}

【问题讨论】:

  • if (b=0) 行不会做你想做的事——它将b 设置为0,然后永远不会进入if 语句的主体。
  • 我们要参加混淆比赛吗?

标签: c++ pointers while-loop


【解决方案1】:

if(b=0)= 是赋值操作。您需要使用== 进行比较。更正为if(b==0)

【讨论】:

  • 此外,大多数编译器都会警告这个常见错误。确保您启用了编译器警告,并且您阅读并理解了您的编译器输出。
  • @codename - 我使用 (),而指针取消引用。这使得代码可读。 Like - r=*aPtr%*bPtr; 可以改为r=(*aPtr)%(*bPtr);
【解决方案2】:

while 循环中的测试是*bPtr &gt; 0,但您在main 中将b 设置为0(使用if (b=0)),然后将指向它的指针作为bPtr 传递。尝试修复 main 中的 if 语句,看看是否会改变行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2013-09-30
    相关资源
    最近更新 更多