L'insertion d'espaces entre les chiffres en C
Comment pourrais-je aller sur la prise d'un certain nombre comme 123456
et avoir l'impression que 1 2 3 4 5 6
?
Je veux dire, comment puis-je mettre en œuvre des espaces de printf affichage final
J'ai pris au tir au reformatage de votre question. Je suppose que l'anglais n'est pas votre première langue, donc pas de soucis. 🙂
Merci GMan 🙂 Oui c'est exactement ce que je veux atteindre
J'ai pris au tir au reformatage de votre question. Je suppose que l'anglais n'est pas votre première langue, donc pas de soucis. 🙂
Merci GMan 🙂 Oui c'est exactement ce que je veux atteindre
OriginalL'auteur MusicianCPlus | 2010-01-18
Vous devez vous connecter pour publier un commentaire.
Comme "jamesdlin' a mentionné dans son commentaire, GMan de l'approche pourrait fonctionner, cependant, vous aurez besoin de le stocker dans une mémoire tampon pour imprimer dans l'ordre correct (son algorithme imprimer "6 5 4 3 2 1" pour l'entrée 123456). À ce point, je dirais qu'il serait beaucoup plus simple pour utiliser sprintf 'therefromhere' a suggéré dans sa réponse (si ce n'est pas un algorithme d'affectation de classes de cours).
À mon avis la façon la plus simple serait d'utiliser la récursivité, de cette façon, vous pouvez imprimer les chiffres dans le bon ordre, sans l'aide de tampons.
Le récursive de la mise en œuvre est très simple:
D'entrée:
De sortie:
MODIFIER: Merci à Steve Jessop qui a proposé un algorithme correct pour des entiers positifs, alors que j'étais loin. J'ai changé la méthode ci-dessus pour imprimer correctement pour tous les entiers (positifs et négatifs), sans le dernier espace.
Veuillez noter que nous pouvons éviter de vérifier les valeurs négatives dans tous les récursivité, en faisant la case juste une fois (dans la fonction principale ou où) mais je n'ai pas l'écrire parce que nous perdrions plus sur la clarté de gagner en performance.
Il ne fonctionne pas pour 101 il wil imprimer 1 1 et de 0, il ne sont pas imprimer quoi que ce soit. Au lieu de if(res>0) faire si(nombre > 0) et puis il va travailler pour rien, sauf 0 et les nombres négatifs. Vous pouvez ensuite écrire une autre fonction dans laquelle vous vérifier si le nombre est 0 et imprimer 0, ou si le nombre est négatif et puis vous printf '-' et PrintfRecursivly (nombre).
Je suis reconnaissant de votre aide.
Vous n'êtes pas correct, cela fonctionne pour tous int32 nombre supérieur ou égal à 0. (nombre >= 0). Même pour les nombres négatifs (il est vrai que pour le moment il ne fonctionne pas) son très simple à résoudre, mais je vais laisser cela à la MusicianCPlus.
Il ne fonctionne pas pour les nombres dont la première décimale est supérieure à 1. Dans ces cas, il imprime un faux "0" au début. Il imprime aussi une fausse espace à la fin - le questionneur demande
1 2 3 4 5 6
, pas1 2 3 4 5 6
. Mais depuis l'interlocuteur accepté cette réponse, je suppose qu'il n'a pas l'esprit, et quand il dit "des chiffres comme 123456", il signifie "les numéros commençant par 1" 😉OriginalL'auteur David Božjak
La façon la plus simple de le faire (mais pas le plus rapide) serait probablement pour la première
sprintf
le nombre en une chaîne de la mémoire tampon, puis faire une boucle par le tamponprintf
-ment un caractère et d'un espace à la fois.Il n'y a pas de façon de le faire dans le standard
printf
mise en forme.sprintf en C++ pas de C? Je ne comprends pas possible en C et je suis pas encore très à l'avance en C
Je pense que sprintf existe dans C trop.
sprintf est à partir de c elle-même et reporté à c++.
OriginalL'auteur John Carter
Une méthode commune serait d'extraire chaque chiffre, puis imprimer ce chiffre. Je ne vais pas vous donner le code, mais c'est la mise en œuvre de la version de:
Ce sera à l'envers. Je vais le laisser comme un exercice à vous de le corriger. (Astuce: Dans la boucle, placer le résultat dans un tableau de caractères, et lorsque vous avez fini de démarrer au dernier indice du tableau et de les imprimer à l'envers.)
Oups, totalement oublié.
OriginalL'auteur GManNickG
OriginalL'auteur dreamlax
sprintf_s
spécifiques à Microsoft?OriginalL'auteur ratnaveer
Cela ne fonctionne que pour des entiers non signés:
OriginalL'auteur Leonardo Herrera
OriginalL'auteur David García Pardo