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