微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在5位数之间插入空格

如何解决在5位数之间插入空格

我已经开始使用C语言进行编程课程的介绍,并且我们要分配一个程序,使程序从用户那里使用5位数字,例如12345,并将其打印为{{1 }}。

我尝试四处寻找帮助,但考虑到该课程刚刚开始,给出的所有答案都使用了过于复杂的代码,以至于我无法理解,而我们仅学会了1 2 3 4 5printfscanfif语句以及switchwhile循环。

我尝试将给定的所有数字放入单独的for变量中,该变量使程序停止运行,然后尝试将其放入char中,但是测试程序表示这是错误的,因为我们应该使用int

有没有简单的方法可以做到这一点?

编辑:

我尝试过的事情:

int

也尝试过使用该代码,但变量类型为#include <stdio.h> int main(void) { int num1,num2,num3,num4,num5; printf("Give 5 digit number > "); scanf("%d%d%d%d%d",&num1,&num2,&num3,&num4,&num5); printf("Seperated number is %d %d %d %d %d",num1,num5); return (0); } ,但这是不允许的,它必须为char

测试程序给出的预期输出int00001Given number 1 seperated is 0 0 0 0 1-12321

解决方法

  1. 您可以使用scanf将用户输入读取到char数组中。
  2. 然后使用for循环可以遍历每个字符(1,2,3,4,5)
  3. 在循环中使用printf从数组和空格打印。 printf("%c ",input_from_user[i]);
,

我想这里的重点是理解C如何存储事物。您正在读取字符(一组通常显示为字母的8字节值),然后将每个字符转换为整数(通常是存储数字的32位值)

因此,您要使用scanf读取输入以获取5位数字的字符串,然后使用for循环遍历每个数字,从字符串中读取单个字符并将其转换为整数变量。然后打印该变量和空格,然后继续以重复下一位。

如果您一一读取数字,那么它甚至更容易,因为您只需要for循环即可读取,转换和打印每个数字作为读取的数字。

,

我不太了解此练习的目的。如果您正在学习C,那么您应该学习的最后一个功能是scanf。很多人很早就教过它,这让人感到困惑。尽量不要使用scanf,直到您对语言有足够的了解,从而意识到自己可能永远不需要它为止。就是说,我想练习的重点是做类似的事情:

#include <stdio.h>
int
main(void)
{
        unsigned num;
        char buf[6];
        printf("Give 5 digit number > ");
        if( scanf("%u",&num) != 1 || num > 99999 ) {
                fprintf(stderr,"Invalid input\n");
                return 1;
        }

        printf("Separated number is");
        snprintf(buf,sizeof buf,"%d",num);
        for( int i = 0; buf[i]; i++ ) {
                printf(" %c",buf[i]);
        }
        putchar('\n');
        return 0;
}
,

根据问题,系统将为您提供5位数字,然后还必须打印该数字。

因此,在您的程序中,您分别输入了五个数字,在我看来,这是错误的。我在下面给出我的解决方案:

#include <stdio.h>
int main(void)
{
    int num,idx=0,i=0;
    int arr[5]; // for storing the five digits;
    scanf("%d",&num);


     
    while(num){   //loop will terminate when the num = 0
       int digit = num%10;
       num = num/10;
       arr[idx] = digit;
       idx++;
    }

   //Printing from the last,as the digit are stored in reverse order.
    for(int i=4;i>=0;i--){      
       printf("%d ",arr[i]);
    }

    return 0;
}
,

尽管可能超出了OP的阶段,但是代码可以使用递归将值从最高有效值打印到最低有效值。

#include <stdio.h>

void print_digit(int n,int depth) {
  if (depth > 1) print_digit(n/10,depth - 1);  // print "left" digits first
  printf(" %d",n%10);
}

void print_5(int n) {
  // To do: checking for correct spelling
  printf("Given number %d seperated",n);  // or separated
  print_digit(n,5);
  printf("\n");
}

int main(void)
{
  print_5(1);
  print_5(-12321);
  return 0;
}

输出

Given number 1 seperated 0 0 0 0 1
Given number -12321 seperated -1 -2 -3 -2 -1
,

您可以通过限制每个数字读取的字节数来使用您的方法:

#include <stdio.h>

int main(void) {
    int num1,num2,num3,num4,num5;

    printf("Give 5 digit number > ");
    if (scanf("%1d%1d%1d%1d%1d",&num1,&num2,&num3,&num4,&num5) == 5) {
        printf("Separated number is %d %d %d %d %d\n",num1,num5);
    }
    return 0;
}

但是请注意,这可能不是您期望的。相反,您应该阅读一个数字并将其分解为五个数字:

#include <stdio.h>

int main(void) {
    int num;

    printf("Give 5 digit number > ");
    if (scanf("%d",&num) == 1 && num >= 10000 && num <= 99999) {
        printf("Separated number is %d %d %d %d %d\n",num / 10000,num / 1000 % 10,num / 100 % 10,num / 10 % 10,num % 10);
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。