2016-04-08 13 views
0

私は1000までのユーザー入力を受け取り、入力の各数を追加する関数を書いています。もしそうであれば、ユーザ入力1000を超える機能「はその数はハイにある」印刷されたユーザ入力12機能出力C関数の戻りエラー

3。私は、ステートメントを印刷する関数を得ることができますが、それはまた、14を出力...私はなぜ理解できませんか?

私はそこに他のバグは私のコードでは、おそらくですが、今、これは私を殺しているものです理解しています。助けることができるものはどれも素晴らしいだろう。

ここに私のコードです。

#include <stdio.h> 

int SummItAll(int value); 

int main() 
{ 
    int userNumber=0, result; 

printf("Enter a positive number \n "); 
scanf("%d", &userNumber); 

result = SummItAll(userNumber); 
printf("%d\n", result); 

return 0; 
} 

int SummItAll(int value) 
{ 
int a=value, b, c, d, f, g; 
if(a < 100) 
{ 
    b = a/10; 
    c = a%10; 
    return b+c; 
} 
else if(a >= 100 && a < 1000) 
{ 
    b = a/100; 
    c = a%100; 
    d = c/10; 
    f = c%10; 
    return b+d+f; 
} 
else 
return printf("That number is to high!\n"); 
} 
+1

これは実際のコードではないと思われます。 'printf()'の戻り値は、(エラーが発生しない限り)出力する文字の数であり、 'main()'に関数戻り値を出力しています。私はあなたのACTUALコードが長さが14の異なる文字列を印刷していると思います。 – Peter

+0

あなたは正しいですこれを転記する前に最後の印刷文を変更しました。以前は長さ14文字の "Thats to high"でした。私はputsがprintf()の代わりに働くことを期待していましたが、それは10を返しました...迅速な応答に感謝します。 – jojonac

答えて

0

printf()関数は、書き出された文字の数を示す整数を返します。

+0

迅速な対応をありがとうございます。 – jojonac

1

printfは、印刷された文字の数を返すので、あなたのメッセージは14文字の長さだったことを知らせるています。あなたがチェックすることができます3つの正の数字の合計が負の数になることはありませんので

、:

ではなくprintfの結果を返す、あなたはおそらく、エラーを示すために、無効な値(例えば、-1)を返す必要がありますその後、SumItAllの結果、およびエラーの場合には異なる行動を取る:彼らは「にISN特別な意味を持っているので-1-2は、上記のコードでは「マジックナンバー」とみなされるであろうことを

#include <stdio.h> 

int SummItAll(int value); 

int main() 
{ 
    int userNumber=0, result; 

    printf("Enter a positive number \n "); 
    scanf("%d", &userNumber); 

    result = SummItAll(userNumber); 

    if (result == -1) 
    { 
     printf("Please enter a POSITIVE number!\n"); 
    } 
    else if (result == -2) 
    { 
     printf("That number is to high!\n"); 
    } 
    else 
    { 
     printf("%d\n", result); 
    } 

    return 0; 
} 

int SummItAll(int value) 
{ 
    int a=value, b, c, d, f, g; 
    if (a < 0) 
    { 
     return -1; // too low! 
    } 
    else if(a < 100) 
    { 
     b = a/10; 
     c = a%10; 
     return b+c; 
    } 
    else if(a >= 100 && a < 1000) 
    { 
     b = a/100; 
     c = a%100; 
     d = c/10; 
     f = c%10; 
     return b+d+f; 
    } 
    else 
    { 
     return -2; // too high! 
    } 
} 

は注意すぐにo bvious。意味をより明確にするために、整数リテラル-1-2の代わりにコードで使用するいくつかのシンボルを定義する方がよいでしょう。たとえば、次のように

#define ERR_NUM_IS_NEGATIVE -1 
#define ERR_NUM_IS_TOO_LARGE -2 

そして、あなたはそれがより明確にするべきである、コードで、これらのシンボリック名の代わりにリテラルを使用することができます。あなたのユースケースについては

+0

迅速な対応をありがとう!これは大いに役立ちます。私はprintf()をputs文で置き換えることを望んでいましたが、もちろん簡単でした。 putsステートメントは10対14を返しました。いくつかのチェックステートメントを追加する必要があるようです。入力いただきありがとうございます! – jojonac

1

は、SummItAllは、入力と出力の両方が渡され、返された結果が有効であるかを示すためにブール値を返しているポインタパラメータを受け入れることをお勧めします。

bool SummItAll(int *value) 
{ 
    if(...) { 
     *value = ... 
     return true; 
    } else if(...) { 
     .. 
    } else { 
     return false; 
    } 

}