一种快速测试是否所有数组元素都为零的方法
TL;DR 我想知道如何清理第一个 if 语句。我尝试在网上查找,但一无所获。
我正在编写一个程序来测试用户输入的数字是否有重复的数字。我设法创建了一个 10 元素的布尔数组 (a[10]),如果 a[i] 等于 0,这意味着数字 'i' 最多出现一次。如果 a[i] 等于 1,则数字 'i' 在键入的数字中至少出现两次(因此重复)。注意 0<=i<=9。
现在我试图分析这个数组中的值,如果所有值都为零,那么我们输入“重复数字”。如果不是,我们就说哪些数字是重复的。
if(a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0 && a[4] == 0 && a[5] == 0 && a[6] == 0 && a[7] == 0 && a[8] == 0 && a[9] == 0)
printf("No repeated digits");
else
printf("Repeated digits: ");
for(i = 0; i < 10; i++) {
if(a[i] == 1)
printf("%d ", i);
}
我找不到结合使用 for 循环和 if 循环来清理第一个 if 语句的方法。我试过在网上查找,但找不到解决方案。
回答
有一个技巧可以检查数组是否所有元素都等于 N:
if (a[0]==N && memcmp(a, a+1, (array_length-1)*sizeof(a[0]) ) == 0)
printf("All equal to Nn");
在你的情况下,你可以这样做:
if (a[0]==0 && memcmp(a, a+1, 9*sizeof(a[0]) ) == 0)
printf("All zerosn");
此代码显式检查第一个元素为零,然后memcmp为您执行以下检查:
a[0] == a[1] && a[1] == a[2] &&....
这不需要像其他memcmp基于的答案那样额外分配和初始化零数组。