7
votes

Comment imprimer '\ n' au lieu d'une nouvelle ligne?

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?

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: xxx

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?


1 commentaires

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').


11 Réponses :


6
votes

Vous pouvez échapper à la barre oblique inverse pour le faire imprimer juste une barre oblique inverse normale: "\\ n".

Edit: Oui, vous devrez faire une analyse manuelle. Cependant, le code à faire, serait juste une recherche et remplacer.


0 commentaires

40
votes

Imprimer "\\ n" - "\\" produit "\" puis "n" est reconnu comme un symbole ordinaire. Pour plus d'informations, voir ici .


0 commentaires

8
votes

Utilisez simplement "\\ n" (deux barres obliques)


0 commentaires

4
votes
printf("\\n");

0 commentaires

1
votes

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: xxx

... et simplement ajouter des énoncés supplémentaires de remplacement pour vous débarrasser des autres caractères non désirés.

[modifier] ou si vous souhaitez utiliser des arguments, essayez ceci: xxx



23
votes

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


3 commentaires

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



5
votes

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


0 commentaires

3
votes

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.


0 commentaires

3
votes

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


0 commentaires

-2
votes

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é. xxx

Essayez-le dans votre logiciel de programmation C ...

solution 2 :

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 .. xxx

Essayez les programmes

Solution 3: Déjà dit ci-dessus utilise \ n


0 commentaires

1
votes

comme de C ++ 11 Vous pouvez également utiliser des chaînes brutes xxx

tout à l'intérieur du r "( et )" va être imprimé littéralement. Les séquences d'échappement ne seront pas traitées.


0 commentaires