PSET1 Credit infinite loop when checking length

I'm working on credit.c in pset1, and I've decided to implement a "get length" method that I'm testing. I think my logic is sound, but I'm getting an infinite loop when running the following code:

``````#include <stdio.h>
#include <cs50.h>

int main(void)
{
long long cnum = 378282246310005;
long long length = 0;

for(long long i = 0; (((10^i)-cnum) < 0); i++)
{
length = i;
}

printf("%lli\n", length);
}
``````

The logic goes that, at 15 loops, 10^14-378282246310005 is negative, and 10^15-378282246310005 is positive. So it should exit the loop when i is 15, but it's instead looping infinitely. Any idea why that might be?

The `^` operator is the Bitwise XOR operator in C as well as many languages that derive their syntax from C (including C++, Python and Java).

I assume you want the power operator. There is no power operator in C, so you need to use a function (and `#include <math.h>`). There IS a power operator in some languages (like Python: `x**y`). This would be the replacement line of code:

``````for(long long i = 0; pow(10, i) - cnum < 0; i++) {
``````

When you are debugging your program, don't forget to TEST your assumptions. If you have an infinite loop, try adding `printf` statements to see what values the computer is actually computing.

If you run this loop:

``````for (long long i = 0; i <= 15; i++) {
printf("10^%lld=%lld\n", i, 10^i);
}
``````

You will get the results:

``````10^0 = 10
10^1 = 11
...
10^14 = 4
10^15 = 5
``````

The bitwise XOR operator creates a new value by performing a logical XOR operation on the corresponding binary bits of the two values.