Home > database >  Why "iscntrl" returns 2?
Why "iscntrl" returns 2?

Time:11-01

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);
  •  Tags:  
  • c
  • Related