This is my test code
#include<iostream>
using namespace std;
int main()
{
uint8_t a;
while(1)
{
cin>>a;
if(a == 0) break;
cout<<"Input is "<<a<<endl;
}
}
When I execute (with my inputs), this is what I get
1
Input is 1
2
Input is 2
12
Input is 1
Input is 2
0
Input is 0
3
Input is 3
Problem1: It takes input 12 as two separate inputs
Problem2: Condition if a==0 doesn't work
What might be the problems?
uint8_t
is a typedef
for an unsigned char
. This means that one character will be read from cin
.
When "0"
is read it is actually the ascii value of the character '0'
commonly 48, which is not zero hence the equality check fails.
uint8_t
is the same as a char
, so trying to extract one from cin probably just gives you the next character to be typed.
The values to receive are then not character-translated-to-int, but the ascii values of the inputs. When you type 0 you're getting ascii \0 rather than int zero, so your test for zero isn't triggered. Try if( a == '0')
to see what I mean.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With