我需要输入一个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");
}
}
答案 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
如果您有兴趣,还可以查看sprintf
和sscanf
。
如果要将结果存储在数组中,请使用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