在C中的数字之间插入空格
我怎样才能获得像123456
这样的数字并将其打印为1 2 3 4 5 6
?
正如’jamesdlin’在他的评论中提到的那样,GMan的方法会起作用,但是你需要将它存储在缓冲区中才能以正确的顺序打印出来(他的算法会输出“6 5 4 3 2 1”进行输入123456)。 在这一点上,我会说,在他的答案中使用sprintf作为’wherehere’建议会更简单(如果这当然不是算法类分配)。
在我看来,最简单的方法是使用递归,这样你就可以在不使用缓冲区的情况下以正确的顺序打印出数字。
递归实现非常简单:
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; }
输入:
-78900456
输出:
- 7 8 9 0 0 4 5 6
编辑 :感谢Steve Jessop在我离开时提出了正整数的正确算法。 我改变了上面的方法,正确打印出所有整数(正面和负面),没有最后一个空格。
请注意,我们可以避免在每次递归中检查负值,只需检查一次(在主函数或任何地方),但我没有写它,因为我们在清晰度上会比性能增益损失更多。
这样做的最简单的方法(虽然不是最快的)可能是首先将数字sprintf
到字符串缓冲区,然后循环遍历缓冲区printf
一次一个字符和一个空格。
在标准的printf
格式化中没有内置的方法。
一种常用的方法是提取每个数字,然后打印该数字。 我不会给你代码,但它是实现的版本:
int d; // your number /* While `d` is not zero */ /* Modulus `d` with 10 to extract the last digit */ /* Print it, with your space */ /* Divide by 10 to remove the last digit */ /* Repeat */
这将是倒退。 我会把它作为练习让你解决这个问题。 (提示:在循环中,将结果放入一个字符数组中,当您从数组的最后一个索引处开始并向后打印时。)
char buffer[50]; int myNum = 123456; int n; int i; n = snprintf(buffer, sizeof buffer, "%d", myNum); for (i = 0; i < n; i++) { putchar(buffer[i]); putchar(' '); } putchar('\n');
int number = 123456; char strNumber[64]; strNumber[0] = '\0'; sprintf_s(strNumber, "%d", number); int i = 0; while(strNumber[i] != '\0') printf("%c ", strNumber[i++]);
这仅适用于无符号整数:
#include #include void print_number(unsigned int number) { int n = number, c = 0, p; while (n > 0) { n /= 10; c++; } for (n = c - 1; n >= 0; n--) { p = pow(10, n); printf("%d ", number / p); number -= number / p * p; } printf("\n"); } int main(int argc, char *argv[]) { print_number(1); print_number(12); print_number(123); print_number(1234); print_number(12345); print_number(1234567); print_number(12345678); print_number(123456789); return 0; }
#include int main () { int a, b, c, d, e; printf("Write a number of four figures\n"); scanf("%d", &a); printf("Your number is:\n"); b = (a - (a % 1000)) / 1000; c = ((a - (a % 100)) / 100) - b * 10; d = ((a - (a % 10)) / 10) - b * 100 - c * 10; e = (a - b * 1000 - c * 100 - d * 10); printf("%d\t%d\t", b, c); printf("%d\t", d); printf("%d", e); return 0; }