我正在编写一个函数,用户输入最多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");
}
答案 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()函数返回一个整数,表示它已写出的字符数。