6
votes

Affichage de la valeur ASCII d'un personnage en C

J'ai accepté un caractère comme une entrée de l'utilisateur. Je veux imprimer la valeur ASCII de ce caractère en tant que sortie. Comment puis-je faire cela sans utiliser de fonction prédéfinie (s'il existe) pour la même chose?


0 commentaires

6 Réponses :


9
votes

au lieu de printf ("% c", my_char) , utilisez % d pour imprimer la valeur numérique (ASCII).


12 commentaires

@Karl: la rumeur a pour que tout le monde avec un repère de représentant supérieur à 10k ait été enlevé et remplacé par un IA. Sauf Jon Skeet, qui était un AI tout le monde.


Merci pour la solution. J'ai essayé d'utiliser cette méthode. Cela ne me donne aucune erreur, mais il affiche la valeur 10 pour tout caractère entré. Donc, j'essaie de comprendre le problème.


rapide mais faux? À ma compréhension, la valeur ASCII d'un personnage est une entité non signée. Donc, vous auriez été meilleur, je pense. Je préfère donc la réponse de Matt, 4 min de plus, mais bien investi ;-)


Je suppose que la réponse de Mark est la meilleure solution Bcoz 'Quelques programmeurs supplémentaires m'ont donné la même solution, mais je pense qu'il y a un problème sur mon côté CoZ' de quel problème se produit.


@user: S'il s'agit d'impression de la même valeur à chaque fois, alors vous êtes passer dans la même valeur à chaque fois. Vérifiez que vos arguments à PrintF sont ce que vous vouliez réellement passer.


@Jens: La norme Absolument ne signifie pas Spécifier si un Char est signé ou non signé .


@Mark: J'ai essayé de donner "A" ainsi que "A", mais il donne la même valeur ASCII 10 pour les deux, ce qui est en fait faux pour les deux. Quelle pourrait être l'erreur possible? Voici le code que je suis exécutant: #include vide principal () {char ch; printf ("entrez un caractère:"); scanf ("% c", & ch); printf ("% d", ch); }


Alors que Char pourrait être signé ou non signé, il semble que je me souvienne de la norme nécessitant que tous les caractères de base nécessaires à l'ensemble de caractères de traduction / exécution ont des valeurs positives ... Peut-on confirmer?


@ user417316: Je pense que vous lisez la nouvelle ligne à partir de la fin d'une ligne ...


@Mark: La question concerne les valeurs ASCII non sur les valeurs numériques d'un Char . (Je sais bien que Char peut être signé ou non signé.) À ma compréhension, une valeur ASCII est toujours positive. Ainsi, j'accepterais un% U comme solution. Mais si même plus de nitpicking vous auriez dû fournir une fonction de traduction à partir du jeu de caractères d'exécution sur ASCII pour avoir vraiment une solution complètement correcte.


@Jens: Étant donné que les valeurs ASCII se trouvent strictement dans la plage de 0 à 127, (% d ", c) et ("% u ", (non signé) c) Imprimer uniquement des valeurs positives pour les caractères ASCII. Les caractères ayant des valeurs négatives dans un signé ne sont pas dans l'ensemble ASCII.


@CAF: Bien sûr, si vous supposez que le charert en fait est ascii. La spécification C n'impose pas cela, alors comme je l'ai dit, la réponse donnée ici est fausse. Je voulais seulement faire valoir qu'un%, vous vous rapprochez de ce que j'accepterais comme une réponse correcte que% d. BTW, je ne connais pas de réponse rapide à la vraie question moi-même, c'est-à-dire de générer la valeur ASCII d'un caractère, quel est le jeu de caractères d'exécution.



7
votes

considère également printf ("% hhu", c); pour spécifier avec précision la conversion en caractères et impression non signé de sa valeur décimale.

update0 En fait testé cela sur mon compilateur C pour voir ce qui se passe, les résultats sont intéressants: xxx

C'est ce qui est imprimé: xxx

merci CAF pour souligner que les types peuvent être promus de manière inattendue (qu'ils sont évidemment pour la % d et % u cas). De plus, il apparaît que le boîtier % HHU est en train de renvoyer à un sans signé , de couper probablement les extensions de signe.


3 commentaires

Vous devez lancer C à (non signé) , sinon il peut être favorisé à int (qui ne correspond pas % u ).


@CAF: Je ne suis pas suivi, n'est-ce pas à voter pendant la conversion?


C'est une technicité, mais le spécificateur % u (même lorsqu'il est utilisé avec HH ) nécessite un (Favorisé) non signé INT argument, sinon le comportement est explicitement indéfini. char peut être favorisé à int plutôt que non signé INT (puisqu'il peut être signé ou non sonné), donc une distribution explicite sur Unfsigned Char est nécessaire pour s'assurer qu'il est promu Unsigné Int .



2
votes

Cette démo montre l'idée de base: xxx


1 commentaires

Merci pour le code!



0
votes

Ceci générera une liste de tous les caractères ASCII et d'imprimer sa valeur numérique. xxx


0 commentaires

1
votes

Le code printf ("% c =% d \ n", n, n); affiche le caractère et son ASCII.


0 commentaires

-1
votes
 #include "stdio.h"
 #include "conio.h"
 //this R.M.VIVEK coding for no.of ascii values display and particular are print

void main()
{
    int rmv,vivek;
    clrscr();

    for(rmv=0;rmv<=256;rmv++)
    {
        if(printf("%d = %c",rmv,rmv))
    }

    printf("Do you like particular ascii value\n enter the 0 to 256 number");
    scanf("%d",&vivek);
    printf("\nthe rm vivek ascii value is=%d",vivek);
    getch();
}

1 commentaires

conio.h est non-sport et ne vaut pas la peine d'être utilisé ici, Main () retourne int , et tu ne vas rien obtenir de bon avis Pour imprimer un Char dans la valeur int 256 .