2009-06-11 11 views
2

これは私が以前に投稿した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; 
} 

...私を助けて申し訳ありませんが、私はどうやらコードは正常に見える..インターネットを閲覧するために

+3

このコードをコンパイルして実行できるように、とにかくgetDigit(int)関数を投稿できますか?その関数はgetNumberOfDigits(int)を実行しているようですが、完全にはわかりません。 – Novelocrat

+1

出力は何ですか? – ralphtheninja

+0

あなたのプログラムは動作します。 – ralphtheninja

答えて

2

をフォーマットするようにできない携帯電話を使用しています。戻り値getDigit(number);を確認してください。

私はちょうどdigits = 3/*getDigit(number)*/;としてコード化され、コードは3桁の数字に対して適切な値を表示していました。

1

私はあなたのgetDigit()関数を持っていないので、私は3つの数字をテストすることができますので、うまく動作するように私のバージョンは3を返します。私の推測では、あなたのgetDigit()が台無しになっているということです。

プログラムは正常に動作します。

+0

死のオレンジバーと全く同じ答え= – ralphtheninja

0

にメインの上部を変える:

// printf("Enter the number(4 digits max): "); 
// scanf("%d", &number); 
for(int x=1;x<10000;x++){ 
    number=x; 

とA}下部の数の任意の長さのために私のために働くようです。

0

それは私のために動作しますが、あなたはすなわち、「捕虜」に最初のパラメータに

multiNo = pow((double)10, (digits-1)); 
0

よりシンプルなロジック渡しているタイプ明確にする必要があります:怠惰なプログラマとして

void print_digits(unsigned number) { 
    unsigned next = number/10; 
    if (next) { 
     print_digits(next); 
    } 

    printf("-%d-", number % 10); 
    return; 
} 
0

を、I

#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; 
}