Comment aller à la ligne précédente dans un code C

Si pour le code suivant:

printf("HEllo\n"); // do not change this line. printf("\b\bworld"); 

J’ai besoin d’une sortie: Helloworld (sur une seule ligne). Mais cela ne fonctionne pas bien. Quelqu’un pourrait-il s’il vous plaît expliquer la raison? Et une autre séquence d’échappement, le cas échéant.

Supprimez “\ n” de votre première impression. Il déplace le curseur sur une nouvelle ligne.

Voici la liste des séquences d’échappement.

Si vous ne pouvez pas supprimer “\ n”, vous pouvez alors copier une sous-chaîne sans ces caractères. Voir l’exemple suivant:

  const char* from = "12345678"; char *to = (char*) malloc(6); strncpy(to, from+2, 5); 

Tout ce dont vous avez besoin est de déterminer l’index des caractères “\ n”.

Il n’y a pas de personnage de contrôle indépendant de la plate-forme pour remonter une ligne. Cela nous ramène à l’époque des imprimeurs linéaires, où printf une ligne de texte sur une feuille de papier et il n’y avait aucun moyen de le rétracter pour écraser ce qui avait déjà été imprimé.

Cela dit, il existe des bibliothèques comme ncurses qui vous permettent de déplacer le curseur autour de la console. Ils ne font tout simplement pas partie des bibliothèques standard.

Pourquoi pas simplement:

 printf("Helloworld"); 

\n est une séquence d’échappement pour une nouvelle ligne. Puisque vous voulez que tout apparaisse sur la même ligne, il n’ya aucune raison de spécifier \n .

Le problème est que vous ne pouvez pas remonter une ligne de manière fiable (avec \b ) après avoir imprimé une nouvelle ligne. Mais si vous avez besoin de deux lignes de code dans votre source, vous pouvez simplement omettre les deux séquences d’échappement:

 printf("HEllo"); printf("world"); 

Si vous écrivez une application console Win32, vous pouvez tirer parti de l’ API Console Screen Buffer . Le code suivant sera déplacé d’une ligne:

 printf("HEllo\n"); CONSOLE_SCREEN_BUFFER_INFO coninfo; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hConsole, &coninfo); coninfo.dwCursorPosition.Y -= 1; // move up one line coninfo.dwCursorPosition.X += 5; // move to the right the length of the word SetConsoleCursorPosition(hConsole, coninfo.dwCursorPosition); printf("world"); 

Sortie:

Bonjour le monde

Le caractère de retour arrière, lorsqu’il est envoyé à un stream (par exemple via la famille de fonctions printf() ), ne cherche pas en arrière dans le fichier, il est envoyé tel quel. Si vous exécutez votre exemple, le caractère de retour arrière sera affiché sous la forme “garbage”.

Si vous ne voulez pas de nouvelle ligne, ne postez pas de caractère de nouvelle ligne.

C’est parce que ‘\ b’ est un code d’échappement terminal … (sans “échapper” bien sûr 😉

il ne modifie donc que ce que vous voyez sur le terminal. C’est-à-dire que le terminal ajuste son affichage pour répondre au code de retour arrière, même s’il a tout reçu avant. Un fichier reçoit également tout, y compris le code de retour arrière, mais ce n’est pas un périphérique tty et le contenu du fichier n’est pas modifié; il garde tout ce que vous lui envoyez.

Si l’impression d’un blanc supplémentaire pose problème, vous devez coder une logique supplémentaire pour imprimer le blanc final sur toutes les sorties, à l’exception de la dernière.

Référence Ceci se réfère aux fichiers mais peut-être que la même idée s’applique. Vous voudrez peut-être consulter ce lien. Il existe une explication très détaillée qui répond probablement à votre question.

Dans une console, vous ne pouvez pas monter de ligne. Vous pouvez vider l’écran et le redessiner (ce qui simule le fait de remonter une ligne.) Ou vous pouvez réécrire sur la même ligne. \ r vous amène au début de la ligne que vous venez d’imprimer.