I want to know why, when I print the instruction iscntrl
, the return value is always 2?
I also want to know why the result of the isalpha
statement is 1024.
For example:
#include <iostream>
using namespace std;
int main()
{
char lettera = 'c';
char numero = '1';
isalpha(lettera)? cout << lettera << " è un carattere!" : cout << lettera << " non è un carattere!";
isalpha(numero)? cout << numero << " è un carattere!" : cout << numero << " non è un carattere!";
cout << endl << isalpha(lettera) << endl; //print 1024
cout << isalpha(numero) << endl; //print 0
cout << iscntrl(numero) << endl; //print 0
cout << iscntrl(1) << endl; //print 2
}
CodePudding user response:
The iscntrl()
function return value:
A value different from zero (i.e., true) if indeed c is an alphabetic letter. Zero (i.e., false) otherwise.
The isalpha()
function return value:
A value different from zero (i.e., true) if indeed c is a control character. Zero (i.e., false) otherwise.
So, it returns non-zero value (not 1) when the condition is true
. So that's intentional.
Also, a tiny note:
isalpha(lettera)? cout << lettera << " è un carattere!" : cout << lettera << " non è un carattere!";
isalpha(numero)? cout << numero << " è un carattere!" : cout << numero << " non è un carattere!";
Those two statements are very similar, so you should make a function:
inline void printmsg(char ch)
{
std::cout << ch << (isalpha(ch) ? "" : " non") << " è un carattere!";
}
and call it:
printmsg(lettera);
printmsg(numero);