【发布时间】:2017-07-10 19:05:05
【问题描述】:
下面的程序应该打印数组元素的和是正数还是负数:
#include <stdio.h>
#define ARR_SIZE 5
int main()
{
int array[ARR_SIZE] = {1,-2,3,4,-5};
unsigned sum;
int i;
for(i=0, sum=0; i < ARR_SIZE; i++)
{
sum += array[i];
printf("sum %d\n ", sum);
}
printf("%d\n",sum);
if(sum>-1) printf("non negative\n");
else printf("negative\n");
return 0;
}
程序没有做它应该做的;无论收到什么数组值,它都会打印“负数”。
例如,上面程序中写的数组的和为1,因此我期望得到以下输出:
sum 1
sum -1
sum 2
sum 6
sum 1
1
non negative
虽然输出是:
sum 1
sum -1
sum 2
sum 6
sum 1
1
negative
为什么我会得到这个输出?
【问题讨论】:
-
您将
sum声明为unsigned。想一想…… -
sum不能是unsigned。 -
if(sum>-1)应该给出编译器警告。打开编译器警告! -
家庭作业:解释当
sum是unsigned时会发生什么。 -
@squeamish ossifrage 谢谢。我实际上已经考虑过这个问题,但问题是,如果 sum 是无符号的,那么这意味着它始终是正数....那么输出怎么会是“负数”呢?我认为它可能会一直打印“非负数”。
标签: c integer sum comparison-operators