我想知道如何清理第一个if语句。我试着在网上找,什么也没找到。
我正在写一个程序来测试用户输入的数字是否有重复的数字。我已经设法创建了一个由10个元素组成的布尔数组(a10),如果ai等于0,这意味着数字'i‘在键入的数字中最多出现一次。如果ai等于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语句。我试过上网找,但找不到解决方案。
发布于 2021-04-12 22:44:02
或使用:
for (i=0; i<10; i++)
if (a[i])
break;
if (i==10) printf("No repeated digits");
else {
//...
}发布于 2021-04-12 22:47:01
这里有一个检查数组是否所有元素都等于N的技巧:
if (a[0]==N && memcmp(a, a+1, (array_length-1)*sizeof(a[0]) ) == 0)
printf("All equal to N\n");在这种情况下,您可以执行以下操作:
if (a[0]==0 && memcmp(a, a+1, 9*sizeof(a[0]) ) == 0)
printf("All zeros\n");这段代码显式地检查第一个元素是否为零,然后memcmp将为您执行以下检查:
a[0] == a[1] && a[1] == a[2] &&....这不需要像其他memcmp -based answers那样额外分配和初始化零数组。
发布于 2021-04-12 22:41:35
您可以使用标志来指示是否找到非零元素。
int nonzero_found = 0;
for(i = 0; i < 10; i++) {
if (a[i] != 0) {
nonzero_found = 1;
break;
}
}
if (nonzero_found) {
printf("Repeated digits: ");
for(i = 0; i < 10; i++) {
if(a[i] == 1)
printf("%d ", i);
}
} else {
printf("No repeated digits");
}或者,如果您真的想打印Repeated digits:,即使没有重复的数字(就像您的原始代码一样):
int nonzero_found = 0;
for(i = 0; i < 10; i++) {
if (a[i] != 0) {
nonzero_found = 1;
break;
}
}
if (!nonzero_found) {
printf("No repeated digits");
}
printf("Repeated digits: ");
for(i = 0; i < 10; i++) {
if(a[i] == 1)
printf("%d ", i);
}https://stackoverflow.com/questions/67060385
复制相似问题