[Solved] Why “iscntrl” returns 2?


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);

1

solved Why “iscntrl” returns 2?