这是关于我今天早些时候发布的problem。我制作了程序来识别和打印给定数字的数字。当我使用1,2,4位数字(我最多4次)时,程序运行正常,但是当我输入一个3位数字时,它会输出错误的数字并突然结束。帮帮我..
#include <stdio.h>
#include <stdlib.h>
#include <digits.h>
int getDigit(long);
int main()
{
int ctr, digits, dig, multiNo, number;
printf("Enter the number(4 digits max): ");
scanf("%d", &number);
printf("\n");
digits = getDigit(number);
if (digits == 1)
printf("%d\n", number);
else
{
multiNo = pow(10, (digits-1));
ctr = 1;
dig = (number/multiNo);
printf("%d ", dig);
while (ctr < digits)
{
number %= multiNo;
multiNo/= 10;
dig = (number/multiNo);
printf("%d ", dig);
ctr++;
}
}
printf("\n\n");
system("PAUSE");
return 0;
}
int getDigit(long num)
{
long divider = 10;
int digit, i;
for (i=1; i<=9; i++)
{
digit = (num/divider);
if (digit == 0)
break;
else
divider *= 10;
}
return i;
}
抱歉,我正在使用手机浏览互联网,因此无法格式化..
答案 0 :(得分:2)
显然代码看起来很好。请检查getDigit(number);
的返回值。
我刚刚硬编码为digits = 3/*getDigit(number)*/;
,代码正在打印3位数的正确值。
答案 1 :(得分:1)
由于我没有你的getDigit()函数我只是让我的版本返回3,所以我可以测试一个3位数字,它工作正常。我的猜测是你的getDigit()搞砸了。
你的程序工作正常。
答案 2 :(得分:0)
将主页顶部更改为:
// printf("Enter the number(4 digits max): ");
// scanf("%d", &number);
for(int x=1;x<10000;x++){
number=x;
底部的和a}似乎适用于任何长度的数字。
答案 3 :(得分:0)
它适用于我,但你需要澄清你传递的第一个参数类型为'pow',即。
multiNo = pow((double)10, (digits-1));
答案 4 :(得分:0)
更简单的逻辑:
void print_digits(unsigned number) {
unsigned next = number / 10;
if ( next ) {
print_digits( next );
}
printf( "-%d-", number % 10 );
return;
}
答案 5 :(得分:0)
作为一个懒惰的程序员,我会用这种方式打印数字:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char Digits[ 129 ];
printf( "Enter digits: " );
gets( Digits );
if( strlen( Digits ) < 1 )
{
printf( "\nNo digits!" );
system( "PAUSE" );
return 0;
}
printf( "Number of digits: %d\n\n", strlen( Digits ) );
for( int Loop = 0; Loop < strlen( Digits ); Loop++ )
printf( "Digit %d: %d\n", Loop, Digits[ Loop ] );
system( "PAUSE" );
return 0;
}