C语言 在5位数字之间插入空格

lskq00tm  于 2023-08-03  发布在  其他
关注(0)|答案(6)|浏览(182)

我已经开始了一个使用C语言的编程入门课程,我们有一个作业,要做一个程序,从用户那里得到一个5位数,比如12345,然后打印出来为1 2 3 4 5
我试着在谷歌上寻求帮助,但所有给出的答案都使用了代码,对于我的理解来说太复杂了,考虑到课程刚刚开始,我们只学习了printfscanfifswitch语句以及whilefor循环。
我试着把所有给定的数字放进单独的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, num2, num3, num4, num5);
    return (0);
}

字符串
也尝试了代码,但与char变量类型,但这是不允许的,它必须是int
测试程序给出的预期输出对于00001Given number 1 seperated is 0 0 0 0 1或对于-12321Given number -12321 seperated is -1 -2 -3 -2 -1

tzcvj98z

tzcvj98z1#

1.可以使用scanf将用户输入读入char数组。
1.然后使用for循环,你可以遍历每个char(1,2,3,4,5)
1.在循环中使用printf从数组和空格中打印。第一个月

jm2pwxwz

jm2pwxwz2#

我想这里的重点是理解C如何存储东西。您正在阅读字符(通常显示为字母的一组8字节值)并将每个字符转换为整数(通常是存储数字的32位值)
因此,您希望使用scanf读取输入以获得5位数字的字符串,然后使用for循环遍历每一位数字,从字符串中阅读单个字符并将其转换为整数变量。然后printf该变量加上一个空格,并继续重复下一个数字。
如果你一个接一个地读取数字,那么它甚至更容易,因为你只需要for循环来读取,转换和打印每个数字。

c86crjj0

c86crjj03#

根据这个问题,你会得到一个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;
}

字符串

t9eec4r0

t9eec4r04#

我真的不明白这个练习的目的。如果你正在学习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;
}

字符串

myzjeezk

myzjeezk5#

虽然可能超出了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

hs1ihplo

hs1ihplo6#

你可以使用你的方法来限制你为每个数字读取的字节数:

#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, num2, num3, num4, 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;
}

相关问题