无法将int数转换为数组(在C中)以输出下一个10个八进制数

时间:2018-03-10 05:44:59

标签: c arrays

我需要输入一个4位八进制数来输出接下来的10个八进制数。我没有得到任何错误,但我的程序无法将输入的数字转换为数组(根据需要),因此它自然也不能输出接下来的10个八进制数字。 我的源代码如下:

int main()
{
    int octNum[4];
    int num;
    printf("Enter the digits of 4-digit octal number to print next 10 octal 
    numbers:\n");
    scanf("%i", &num);

    int i = 3;
    //convert number to array
    do {
        octNum[i] = num % 10;
        num /= 10;
        i--;
    } while (num != 0);

    printf("\nThe number is %i%i%i%i", octNum[0], octNum[1], octNum[2], 
    octNum[3]);

    //getting next 10 octals
    for (int x = 0; x < 10; x++)
    {
        octNum[3]++;
        for (int j = 3; j > 0; j--)
        {
            if (octNum[3] == 8)
            {
                octNum[j-1]++;
                octNum[j] = 0;
            }
        }
        printf("%i\t", &octNum[x]);
        printf("\n");
    }
}

3 个答案:

答案 0 :(得分:0)

考虑以下使用标准c库函数来实现相同结果的代码:

#include<stdio.h>

int main()
{
        int res=0;
        printf("Enter octal number");
        scanf("%4o",&res);//Converts the input in octal format to integer and store in res
        int i;

        printf("%4o\n",res);//Print res in octal format 
        char nextNum[10];
        for(i=0;i<10;++i)
        {
                sprintf(nextNum,"%4o",++res);//Store octal value of res in a string 
                printf("%s\n",nextNum);//Print the octal value 
        }
        return 0;
}

您可以使用printf的格式说明符%o来获得结果。 请查看Printf Format Specifiers

如果您有兴趣,还可以查看sprintfsscanf

如果要将结果存储在数组中,请使用sprintf将给定数字转换为八进制格式,并使用结果字符串将其存储在数组中。

我已经使用库函数进行转换,因为它已经可用且经过充分测试。请注意,它不会执行任何错误检查,数字必须采用指定的格式,否则您可能会得到意外的结果。

以下是示例输出:

Enter octal number4566
4566
4567
4570
4571
4572
4573
4574
4575
4576
4577
4600

答案 1 :(得分:0)

您的更正代码是:

#include<stdio.h>
int main()
{
    int octNum[4];
    int num;
    printf("Enter the digits of 4-digit octal number to print next 10 octal    numbers:\n");
    scanf("%i", &num);

    int i = 3;
    //convert number to array
    do {
        octNum[i] = num % 10;
        num /= 10;
        i--;
    } while (num != 0);

    printf("\nThe number is %i%i%i%i\n", octNum[0], octNum[1], octNum[2],    octNum[3]);

    //getting next 10 octals
    for (int x = 0; x < 10; x++)
    {
        octNum[3]++;
        for (int j = 3; j > 0; j--)
        {
            if (octNum[j] == 8)
            {
                octNum[j-1]++;
                octNum[j] = 0;
            }
            else//add this else statement
                break;
        }
        for(i=0;i<=3;++i)//Printing has to be done in a loop
                printf("%d\t", octNum[i]);//You were printing address of octNum[i] rather than octNum[i]
        printf("\n");
    }
}

示例输出:

Enter the digits of 4-digit octal number to print next 10 octal    numbers:
1234

The number is 1234
1   2   3   5   
1   2   3   6   
1   2   3   7   
1   2   4   0   
1   2   4   1   
1   2   4   2   
1   2   4   3   
1   2   4   4   
1   2   4   5   
1   2   4   6   

答案 2 :(得分:0)

我认为最好不要在这里使用%i格式说明符,因为它将接受二进制和八进制(以及十六进制)的输入。

例如,如果您输入14,则会在14中输入数字num(十进制)。
如果输入为014,则会在12中放置数字14,这是八进制数num的十进制等值。

获取octNum[]中输入数字的数字,octNum[0]中的最高有效数字和octNum[3]中的最低有效数字后,您可以

int c[5];
for(int i=0; i<10; ++i)
{
    //Resetting the carry values
    c[0]=c[1]=c[2]=c[3]=0;
    c[4]=1;

    for(int j=3; j>=0; --j)
    {
        c[j] = (octNum[j] + c[j+1])/8;
        octNum[j] = (octNum[j] + c[j+1])%8;
    }
    printf("\n%d%d%d%d", octNum[0], octNum[1], octNum[2], octNum[3]);
}

数组c[]用于存储进位值。 c[4] 1每次都会增加数字。

示例输出:

Enter the digits of 4-digit octal number to print next 10 octal numbers:
4577

4600
4601
4602
4603
4604
4605
4606
4607
4610
4611