#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int min, max, sumOfSquares;
sumOfSquares = 0;
//scanf_s("%d %d", &min, &max);
while((scanf_s("%d", &min)) != (scanf_s("%d", &max)))
{
for (int i = min; i <= max; i++)
{
sumOfSquares += (i*i);
}
printf("%d", sumOfSquares);
printf("%d %d", min, max);
}
return 0;
}
所以基本上,我输入两个整数。一个是最小值,另一个是最大值。我得到最小值和最大值的平方和它们之间的每个数字的总和。 我不太确定哪里出错了。 当我输入两个数字时,根本没有打印出来,所以我猜测while语句有问题吗?
这不是一种可接受的格式吗?
有人可以告诉我出了什么问题,如果可能的话,请指出正确的方向。
另外,我使用while循环,因为它应该继续询问我输入并打印sumOfSquares,直到我输入一个彼此相等的输入,如5 5。
答案 0 :(得分:4)
scanf_s
与scanf
一样,返回已成功解析的值的数量。 scanf_s("%d", &min)
将返回0,1或EOF
(对于错误和文件结尾)。因此,比较
(scanf_s("%d", &min)) != (scanf_s("%d", &max))
如果只能读取min
和max
中的一个,那么才会成立,并且它们所采用的值不会影响结果。此外,未定义读取值的顺序,因为未指定评估!=
的操作数的顺序。
你可能想要使用像
这样的东西while(scanf_s(" %d %d", &min, &max) == 2 && min != max)
如果scanf_s(" %d %d", &min, &max) == 2
报告它能够解析两个值,那么scanf_s
将成立(您可以通过两次调用scanf_s
来执行此操作,但我认为没有理由这样做),我认为min != max
是不言自明的。