How would I go about taking a number like 123456
and having it print as 1 2 3 4 5 6
?
The simplest way of doing this (though not the fastest) would probably be to first sprintf
the number to a string buffer, and then loop through the buffer printf
-ing one character and one space at a time.
There's no built-in way of doing this within the standard printf
formatting.
As 'jamesdlin' has mentioned in his comment, GMan's approach would work, however you will need to store it in a buffer in order to print out in the correct order (his algorithm would print out "6 5 4 3 2 1" for input 123456). At this point I'd say that it would be much simpler to just use sprintf as 'therefromhere' suggested in his answer (if this is not an algorithm class assignment of course).
In my opinion the simplest way to do it would be using recursion, this way you can print out digits in the right order without using buffers.
The recursive implementation is very simple:
void PrintfRecursivly(int number)
{
if (number < 0)
{
number *= -1;
printf("- ");
}
if (number > 10)
{
PrintfRecursivly(number / 10);
printf(" ");
}
printf("%d", number % 10);
}
int main()
{
int number = -78900456;
PrintfRecursivly(number);
return 0;
}
Input:
-78900456
Output:
- 7 8 9 0 0 4 5 6
EDIT: Thanks to Steve Jessop who suggested a correct algorithm for positive integers while I was away. I changed the above method to print out correctly for all ints (positive and negative), without the last space.
Please note that we can avoid checking for negative values in every recursion, by doing the check just once (in the main function or wherever) but I didn't write it because we would lose more on clarity than gain in performance.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With