2016-09-12 1 views
-2

Le programme suivant ne compile pas.cin ne fonctionne pas avec typecaset

#include <iostream> 
#include <cstdio> 
using namespace std; 

int main(){ 
    char c; 
    cin >> (int)c;  // stat 1 
    //scanf("%d", &c); //stat 2; this when complied gives warning 
    cout << c << endl; 
} 

Q1. Comment utiliser cin pour accepter la valeur ASCII d'un caractère. Je veux le faire en utilisant une variable char.

Q2. S'il est garanti que la valeur entrée par l'utilisateur se situe dans la plage de caractères, stat 2toujours produire le résultat souhaité.

Répondre

4

Donc, vous voulez être en mesure de saisir par ex. 97 et pour obtenir la sortie 'a'? Ensuite, lisez dans un réel int et transtypez la variable int en un caractère dans la sortie. C'est à dire. presque à l'opposé de ce que vous faites:

int c; 
std::cin >> c; 
std::cout << static_cast<char>(c); 

Si vous voulez vous assurer que l'entrée est un caractère valide, utilisez par exemple std::isalpha ou l'un des autres character classification functions.

+0

Merci @ Joachim-Pileborg. Mais ma question utilise un typecast (int) avec 'cin'. Explication donnée par vous résout le problème, mais je veux savoir sur le typage avec 'cin'. –

+2

@DeepakAggarwal '(int) c' ne fonctionne pas parce que vous avez créé un temporaire. '(int) c' n'est pas * traiter c comme un int *. c'est * créer un int qui a la valeur de c *. – NathanOliver

+0

@DeepakAggarwal Pour être plus précis, les fonctions d'opérateur d'entrée prennent des arguments de référence non-const, et '(int) c' crée un rvalue qui ne peut pas être lié à une référence non-const. –