如果构建建议需要
我有一个for循环,我在其中放置了几个if语句。这些条件的目的是检查数字的可分性,然后输出一个字符串,如果数字可以被3整除。如果数字可以被5整除,则会输出另一个字符串。但是,如果数字可以被3和5整除,那么将会输出一个完全不同的字符串,而不是其他字符串。如果构建建议需要
这里是我的代码:
for (i = 1; i <= file_int; i++){
if (i % 3 == 0) {
printf("Hoppity \n");
}
if (i % 5 == 0) {
printf("Hophop \n");
}
if (i % 5 == 0 && i % 3 == 0) {
printf("Hop \n");
}
}
正如你所看到的,最后的条件完全不是那么回事。我应该使用什么类型的控制结构?其他?
非常感谢。
for (i = 1; i <= file_int; i++){
if (i % 5 == 0 && i % 3 == 0) {
printf("Five and three\n");
} else if (i % 3 == 0) {
printf("Three\n");
} else if (i % 5 == 0) {
printf("Five\n");
} else {
printf("None of the conditions passed\n");
}
}
@ Number7even如果您发现上述答案是正确的,请点击答案旁边的勾号来确认。谢谢! – 2011-12-30 04:21:51
另一种解决方案,更接近您的原始代码。虽然else
解决方案确实更高效(和优雅)。
for (i = 1; i <= file_int; i++){
if (i % 3 == 0 && i % 5 != 0) {
printf("Hoppity \n");
}
if (i % 5 == 0 && i % 3 != 0) {
printf("Hophop \n");
}
if (i % 5 == 0 && i % 3 == 0) {
printf("Hop \n");
}
}
我会用else-ifs
,使我们的事实,
(i % 5 == 0 && i % 3 == 0) <=> (i % 15 == 0)
:
for (i = 1; i <= file_int; i++){
if (i % 15 == 0)
printf("Hop \n");
else if (i % 3 == 0)
printf("Hoppity \n");
else if (i % 5 == 0)
printf("Hophop \n");
}
当然,你也可以蒙混过关,而无需使用除for
-loop任何控制结构都:
const char* values[15] = {"Hop \n", "", "", "Hoppity \n", "",
"Hophop \n", "Hoppity \n", "", "", "Hoppity \n",
"Hophop \n", "", "Hoppity \n", "", ""};
for (int i = 1; i <= 100; i++)
printf(values[i % 15]);
该解决方案是略微insa ne这个例子,但是它展示了你如何做不同的事情(当编写代码的时候,你永远不会在一个函数中拥有一定数量的分支路径(过度的编码约定......))。
只为它的缘故,而不是推荐它,因为它可以更硬,因为它滥用转换以读取来自bool
到int
:
int msg = (i % 3 == 0) + 2*(i % 5 == 0);
switch (msg) {
case 3:
cout << "Multiple of 3 and 5";
case 2:
cout << "Multiple of 5";
case 1:
cout << "Multiple of 3";
}
其可以进一步稠合到:
const char* msgs[] = { "", "Multiple 3", "Multiple 5", "Multiple 3 and 5" };
cout << msgs[ (i%3==0) + 2*(i%5==0) ];
当然,两种解决方案都是针对这个问题本身,因为它们不是如果构造,而是避免使用如果在第一种情况下,并且分支一般在第二种情况下。
你是什么意思“你可以看到?”你展示了代码,但没有输出。最后的'if'语句从这里看起来没问题。 – 2011-12-29 21:29:48
'if'不形成循环。一个循环是一个闭合的东西,其中开始和结束在某个时刻相遇。画一个顺序图,你会看到。顺便说一句,为这个代码绘制一个序列图。 – thiton 2011-12-29 21:31:20
@DanFego我需要if语句覆盖其他两个if语句时,它是真实的,所以才有“合”印,而不是 “Hoppity” “HopHop” ,“跳” – 2011-12-29 21:31:32