I don’t get why I get 0 when I use printf and %d to get the size of my vector:
vector<long long> sieve; int size; ... //add stuff to vector ... size = sieve.size(); printf('printf sieve size: %d \n', size); //prints 'printf sieve size: 0' std::cout << 'cout sieve size: '; std::cout << size; std::cout << ' \n '; //prints 'cout sieve size: 5 (or whatever the correct sieve size is)'
If I iterate through the vector via
if(i=0;i<sieve.size();i++)
I get the correct number of iterations.
What am I doing wrong or what is up with printf? size() returns an int right??
Here’s my entire little script:
#include <iostream> #include <vector> #include <stack> #include <math.h> int main (int argc, char * const argv[]) { unsigned long long answer = 0; unsigned long long cur = 2; std::vector<long long> sieve; unsigned long long limit; unsigned long long value; unsigned int i; int size; bool isPrime; std::cout << 'Provide a value to find its largest prime factor: '; std::cin >> value; limit = ceil(sqrt(value)); sieve.push_back(2); while(cur++ < limit){ isPrime = true; sieve.begin(); for(i=0; i<sieve.size();i++){ if(!(cur % sieve[i])){ isPrime = false; break; } } if(isPrime){ if(!(value % cur)){ std::printf('Is prime factor: %d\n', cur); sieve.push_back(cur); answer = sieve[sieve.size() - 1]; size = sieve.size(); std::printf('current last: %d sieve size: %ld\n', answer, size); for(i=0; i<sieve.size();i++){ std::printf('sieve iter: %d sieve val: %d\n', i, sieve[i]); std::cout << size; std::cout << ' wtf\n'; } } } } answer = sieve[sieve.size() - 1]; size = sieve.size(); std::printf('Limit: %d Answer: %d sieve size: %ld\n', limit, answer, size); return 0; }
Now, with the complete source, it is clear.
You declared:
Then you used:
If size is int, you should use ‘%d’, not ‘%ld’. A good compiler would have warned you about this. GCC gives these warnings for your original version:
This tells a lot.
You should declare size as:
Then you should use it as:
Of course, using iostream avoids you these problems, specially the ugly casting in printf() to transform size to a type known to printf.