首页 > 解决方案 > 打印一个整数,中间有空格

问题描述

我正在编写一个代码来重写从用户那里获取的整数,其中之间有空格。例如 456 将给出 4 5 6。这是我的代码,但它用空格反向打印整数。例如它的打印 6 5 4 而不是 4 5 6。我哪里错了?

#include<stdio.h>

int spc(int x);

int main() {
    int n1;

    printf("Enter Number:");
    scanf("%d", &n1);
    spc(n1);
}

int spc(int x)
{
    int rem,quo;
    do {
        rem = x % 10;
        printf(" %d",rem);
        quo = x / 10;
        x = quo;    
    } while(x % 10 > 0);
}

标签: c

解决方案


你不仅要按相反的顺序写数字,还要写你的结束条件

而(x % 10 > 0);

错误并在到达“0”时停止循环

此外,该功能必须是void因为您从不返回值,而且您不必这样做。

始终检查scanf是否能够获得预期值

可 :

#include<stdio.h>

void spc(int x);

int main() {
  int n1;

  printf("Enter Number:");
  if ((scanf("%d", &n1) == 1) && (n1 >= 0)) {
    spc(n1);
    putchar('\n');
  }
}

void spc(int x)
{
  if (x >= 10)
    spc(x/10);
  putchar((x % 10) + '0');
  putchar(' ');
}

如果您还想管理仍然只使用int的负数:

#include<stdio.h>

void spc(int x);

int main() {
  int n1;

  printf("Enter Number:");
  if (scanf("%d", &n1) != 1)
    puts("invalid number");
  else {
    spc(n1);
    putchar('\n');
  }
}

void spc(int x)
{
  if (x/10 != 0)
    spc(x/10);
  else if (x < 0)
    fputs("- ", stdout);
  putchar(((x < 0) ? -(x % 10) : x % 10) + '0');
  putchar(' ');
}

警告不要这样做-x,因为最负的int没有等效的正int

bruno@bruno-XPS-8300:/tmp$ gcc f.c
bruno@bruno-XPS-8300:/tmp$ ./a.out
Enter Number:aze
invalid number
bruno@bruno-XPS-8300:/tmp$ ./a.out
Enter Number:0
0 
bruno@bruno-XPS-8300:/tmp$ ./a.out
Enter Number:123
1 2 3 
bruno@bruno-XPS-8300:/tmp$ ./a.out
Enter Number:-123
- 1 2 3 
bruno@bruno-XPS-8300:/tmp$ 

如果您有数字的外部表示,我们可以想象不管理数字而只是按顺序打印字符串,在每个字符后添加一个空格,但这可能是作弊

请注意,在我的定义中,我不使用printf像这样的格式,%d因为它对数字没用,而且我不想使用printf,因为考虑到这个问题,这是为了作弊


推荐阅读