C函数返回错误

时间:2016-04-08 01:52:03

标签: c function if-statement

我正在编写一个函数,用户输入最多1000个,然后添加每个输入数。因此,如果用户输入12,则功能输出3。

当用户输入1000或以上时,该功能将打印“该数字为高”。我可以得到打印语句的功能,但它也输出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");
}

3 个答案:

答案 0 :(得分:1)

printf会返回打印的字符数,因此它会告诉您邮件的长度为14个字符。

您应该返回一个无效值(例如printf)来表示错误,而不是返回-1的结果:

由于3位正数之和永远不能为负数,因此您可以检查SumItAll的结果,然后在出现错误时采取不同的操作:

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

请注意,-1-2在上面的代码中会被视为“神奇数字”,因为它们具有特殊含义,并不是很明显。在代码中定义一些符号代替整数文字-1-2可能会更好,以使含义更清晰。例如:

#define ERR_NUM_IS_NEGATIVE  -1
#define ERR_NUM_IS_TOO_LARGE -2

然后你可以在代码中使用那些符号名称而不是文字,这应该使它更清晰。

答案 1 :(得分:1)

对于您的用例,SummItAll最好接受一个指针参数,其中传递输入和输出,并返回一个布尔值以指示返回的结果是否有效。

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

}

答案 2 :(得分:0)

printf()函数返回一个整数,表示它已写出的字符数。