奇怪的代码错误

时间:2009-06-11 18:53:21

标签: c++ c

这是关于我今天早些时候发布的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;
}

抱歉,我正在使用手机浏览互联网,因此无法格式化..

6 个答案:

答案 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;
}