Problem with two functions in single cout

For discussions about programming, programming questions/advice, and projects that don't really have anything to do with Puppy.
Post Reply
Message
Author
User avatar
mahaju
Posts: 487
Joined: Mon 11 Oct 2010, 07:11
Location: between the keyboard and the chair

Problem with two functions in single cout

#1 Post by mahaju »

Code: Select all

#include<iostream>
#include<conio.h>
using namespace std;
typedef unsigned long ulong;


long eeuclid(long m, long b, long *inverse){        /// eeuclid( modulus, num whose inv is to be found, variable to put inverse )
    long A1 = 1, A2 = 0, A3 = m,
         B1 = 0, B2 = 1, B3 = b,
         T1, T2, T3, Q;

         cout<<endl<<"eeuclid() started"<<endl;

        while(1){
            if(B3 == 0){
                *inverse = 0;
                return A3;      // A3 = gcd(m,b)
            }

            if(B3 == 1){
                *inverse = B2; // B2 = b^-1 mod m
                return B3;      // A3 = gcd(m,b)
            }

            Q = A3/B3;

            T1 = A1 - Q*B1;
            T2 = A2 - Q*B2;
            T3 = A3 - Q*B3;

            A1 = B1; A2 = B2; A3 = B3;
            B1 = T1; B2 = T2; B3 = T3;
       }
    cout<<endl<<"ending eeuclid() "<<endl;
}

int main(){
    long a, b, c, d=0, e, inverse = 0;
    int ch;
        cout<<"Preparing extended Euclid ---> "<<endl;
        cout<<"m >> ";
        cin >> a;
        cout<<"b >> ";
        cin >> b;
        cout<<"gcd("<<a<<","<<b<<") = "<<eeuclid(a, b, &inverse);
        cout<<" and inverse  = "<<inverse<<endl;
        cout<<endl<<"Press q to quit ... "<<endl;
    return 0;
}
In the above code, in the main() function, if

Code: Select all

cout<<"gcd("<<a<<","<<b<<") = "<<eeuclid(a, b, &inverse);
        cout<<" and inverse  = "<<inverse<<endl;
is replaced by

Code: Select all

cout<<"gcd("<<a<<","<<b<<") = "<<eeuclid(a, b, &inverse)<<" and inverse  = "<<inverse<<endl;
the value of inverse prints out as 0, even though single stepping through the code and examining the value in memory shows that the variable inverse has the correct value
Why is that??

User avatar
technosaurus
Posts: 4853
Joined: Mon 19 May 2008, 01:24
Location: Blue Springs, MO
Contact:

#2 Post by technosaurus »

printf still works in C++ ... cout and cin and the <<knife jabs>> are an almost as much an abomination as sed picket fences (and reason 999 I prefer C) - you should post it on stackoverflow though, where there are a few people that bought into the hype and actually think c++ is a good tool (most Puppy coders use C or bash/shell)

I don't write much C++, but it is probably this bit FUNCTION(...)<<... (stops going to cout, and goes to your function)
... seriously printf is much easier to read and debug
Check out my [url=https://github.com/technosaurus]github repositories[/url]. I may eventually get around to updating my [url=http://bashismal.blogspot.com]blogspot[/url].

User avatar
mahaju
Posts: 487
Joined: Mon 11 Oct 2010, 07:11
Location: between the keyboard and the chair

#3 Post by mahaju »

What I actually don't understand is, this is code that I had completed and tested months ago
Yesterday when I as running it again it was working fine for the first few runs
Since this is not a very long code I usually do a rebuild and rerun of this project every time I want to run it again
For the first few rebuilds and reruns it worked as expected
Then suddenly this happened
I didn't expect something like that was possible

Post Reply