J'écris un programme qui utilise des impressions une vidage hexagonale de son entrée. Cependant, je rencontre des problèmes lorsque des lignes neuves, des onglets, etc. sont transmises et détruisant mon formatage de la sortie.
Comment puis-je utiliser PrintF (ou Cout-Cout, je suppose) à imprimer "\ n" au lieu d'imprimer une nouvelle ligne? Ai-je juste besoin de faire une analyse manuelle pour cela? P>
Edit: Je reçois mes données de manière dynamique, ce n'est pas seulement le \ N que je suis bon, mais plutôt tous les symboles. Par exemple, il s'agit de mon énoncé de printf: p> Comment puis-je faire cette impression \ n quand une nouvelle ligne est transmise en tant que THECHAR, mais le fait toujours imprimer du texte normal lorsque THECHAR est un caractère imprimable valide? p> p>
11 Réponses :
Vous pouvez échapper à la barre oblique inverse pour le faire imprimer juste une barre oblique inverse normale: Edit: Oui, vous devrez faire une analyse manuelle. Cependant, le code à faire, serait juste une recherche et remplacer. P> "\\ n". code> p>
Imprimer "\\ n" - "\\" produit "\" puis "n" est reconnu comme un symbole ordinaire. Pour plus d'informations, voir ici . P>
Utilisez simplement "\\ n" (deux barres obliques) p>
printf("\\n");
Il suffit d'utiliser String :: Remplacez pour remplacer les caractères incriminés avant Vous appelez printf.
Vous pouvez envelopper le printf pour faire quelque chose comme ceci: p> ... et simplement ajouter des énoncés supplémentaires de remplacement pour vous débarrasser des autres caractères non désirés. p>
Ce n'est pas comment STD :: basic_string :: remplacer les travaux. De en.cppreference.com/w/cpp/string/basic_string/replace/ A> Nous voyons que remplacer remplacera la partie de la chaîne indiquée par [POS, POS + Count) ou [premier, dernier) code> avec une nouvelle chaîne. Il ne recherche pas la chaîne d'origine et remplace les occurrences trouvées.
La fonction PrintCharchar () code> ci-dessous imprimera des caractères "spéciaux" et imprimer le code octal des caractères hors de portée (A la Emacs), mais imprimez des caractères normaux. J'ai également pris la liberté d'avoir
'\ n' code> Imprimer un vrai
'\ n' code> après avoir la sortie de votre sortie plus lisible. Notez également que j'utilise un
int code> dans la boucle dans
Main code> Juste pour pouvoir itération sur toute la plage de
non signé Char code>. Dans votre usage, vous aurez probablement juste un
non signé Char code> que vous avez lu depuis votre jeu de données.
#include <stdio.h>
static void printchar(unsigned char theChar) {
switch (theChar) {
case '\n':
printf("\\n\n");
break;
case '\r':
printf("\\r");
break;
case '\t':
printf("\\t");
break;
default:
if ((theChar < 0x20) || (theChar > 0x7f)) {
printf("\\%03o", (unsigned char)theChar);
} else {
printf("%c", theChar);
}
break;
}
}
int main(int argc, char** argv) {
int theChar;
(void)argc;
(void)argv;
for (theChar = 0x00; theChar <= 0xff; theChar++) {
printchar((unsigned char)theChar);
}
printf("\n");
}
Devrait être <32 (ou 0x20) et> = 127. Aussi pour% o Vous devez lancer THECHAR à un caractère non signé (ou & 0xFF) car caractère est généralement signé.
Merci @ Mark4o, vous avez raison sur le 0x20 et le 32. Correction de ma réponse.
La condition à la limite supérieure doit être> = 0x7f au lieu de> 0x7f. 0x7F caractère représente Suppr Delete qui est un caractère non imprimable
Si vous souhaitez vous assurer d'imprimer des caractères non imprimables, vous pouvez utiliser les fonctions dans ctype.h code> comme
isprint code>:
if( isprint( theChar ) )
printf( "%c", theChar )
else
switch( theChar )
{
case '\n':
printf( "\\n" );
break;
... repeat for other interesting control characters ...
default:
printf( "\\0%hho", theChar ); // print octal representation of character.
break;
}
Outre les exemples fournis par d'autres personnes, vous devez consulter les fonctions de classification des caractères tels que Isprint () et ISCNTRL () . Ceux-ci peuvent être utilisés pour détecter quels caractères sont ou ne sont pas imprimables sans avoir à des valeurs hexagonales du code HARD à partir d'une table ASCII. P>
en C / C ++, le caractère "\ 'est réservé comme caractère d'échappement. Donc, chaque fois que vous voulez imprimer un '\', vous devez entrer '\'. Donc, pour imprimer la valeur «\ n» réelle, vous imprimeriez les éléments suivants:
printf("\\n");
Il existe trois solutions pour cette question:
solution 1:
Chaque symbole, nombre, alphabet a sa propre valeur ASCII. La valeur ASCII de '\' comme 92 et 'n' comme 110. Les valeurs immédiates (numéros (ASCII)) sont stockées sur deux variables entier. Lors de l'impression, le spécificateur de format% C (caractère) est utilisé. P> Essayez-le dans votre logiciel de programmation C ... p> solution 2 : P> Les programmes fonctionnent. Mais je pense que celui-ci n'est pas juste ...
À l'écran de sortie, tapez l'entrée comme \ n ...
Vous obtiendrez un autre \ n .. p> Essayez les programmes P> Solution 3:
Déjà dit ci-dessus utilise \ n p> p>
comme de C ++ 11 Vous pouvez également utiliser des chaînes brutes tout à l'intérieur du r "( code> et
)" code> va être imprimé littéralement. Les séquences d'échappement ne seront pas traitées. p> p>
N'oubliez pas qu'il n'y a aucun moyen d'un seul appel à imprimerf ("% c", FOO) peut produire \ n, une chaîne de deux caractères. Vous devez essentiellement choisir entre la modification de l'entrée (remplaçant "\ n" avec "\\ n") ou un bon vieux mode si (THECHAR == '\ N').