I don't understand why you have this, as it will just set guess to zero, as guess / guess will not have a remainder. Why not just use guess = 0; If that is what you are after.
Initially, the number may be anywhere within the range between 1 and 100, so
guess = rand()% 100 +1;
is correct. However, you should think of that in terms of the variables low and high, where low=1 and high=100.
How can you rewrite this line guess = rand()% 100 +1 so that neither 1 nor 100 is used, instead substitute something which uses the variables low and high.
Or as CodeGoggles suggested, "halfway between current valid range". How do you do that? Simple arithmetic, take the average of the start and end values.
There may be other issues. However at line 48 is this:
int high;
There are at least two problems with that. First, the local variable will hide the previous declaration of high at line 13. Second it is not initialised, so that its value will be whatever garbage happens to remain in that particular memory location from some previous use. And third, it doesn't serve any purpose, other than, as you said, to make it "all messed up!"
Edit:
You might also find it useful for diagnostic purposes to add this line: