int smallest(int x, int y, int z)
{
int smallest = x;
if (y < smallest)
smallest = y;
if (z < smallest)
smallest = z;
return smallest;
}
void printmessage(int smallest)
{
int w = 0;
if(smallest < 0 || smallest >= 10)
cout << "it is not possible to print the message in this case" << endl;
else
{
for(w < 0 ||w > 10; w < smallest; w++)
cout << "No" << endl;
cout << endl << endl;
}
}
这基本上只读入3个值并找到最小值。根据最小值打印出“否”消息。如果是5,则“否”将被打印5次。不确定如何修复我在printmessage
中声明最小的部分。有人可以帮我解决吗?
答案 0 :(得分:0)
根据您的评论,您只需要修复for
循环的第一部分:
void printmessage(int smallnum) {
if(smallnum < 0 || smallnum >= 10) {
cout << "it is not possible to print the message in this case" << endl;
} else {
for(int w = 0; w < smallnum; w++) {
cout << "No" << endl;
}
}
}
请注意参数名称的更改 - 现在,您已经有一个名为smallest()
的函数,因此您也不应该使用此名称创建变量,否则您将会发生奇怪的事情。对于smallest()
函数本身也是如此 - 将第一行int smallest = x;
更改为int smallnum = x
或类似,并在函数的其余部分更改对它的引用。
并且,正如namfuak在评论中指出的那样,将printmessage(smallest);
更改为printmessage(smallest(x, y, z));
,否则您将尝试传递函数的地址,而不是其结果。
在一个完整的工作示例中:
#include <iostream>
void printmessage(int smallnum) {
if(smallnum < 0 || smallnum >= 10) {
std::cout << "it is not possible to print the message in this case"
<< std::endl;
} else {
for(int w = 0; w < smallnum; ++w) {
std::cout << "No" << std::endl;
}
}
}
int main(void) {
printmessage(5);
return 0;
}
输出:
paul@local:~/src/cpp/scratch$ ./smallest
No
No
No
No
No
paul@local:~/src/cpp/scratch$
答案 1 :(得分:0)
for(w < 0 ||w > 10; w < smallest; w++)
这的第一部分实际上没有意义,而声明在技术上执行for循环中的第一个语句通俗地用于初始化和/或分配循环控制变量。在您的情况下,您可能想要使用它:
for(int w = 0; w < smallest; w++)
这将初始化循环范围内的变量“w”,而不是函数的范围(因此在循环退出后,“w”将被丢弃)。由于你只需要在循环中使用它,这应该是你正在寻找的。 p>
如果要检查w是否也不小于0或大于10,可以使用以下循环:
for(int w = 0; w < 0 || w > 10, w < smallest; w++)
如果稍后需要(或者在不需要循环控制变量的其他情况下),也可以将初始w保留在函数作用域中,并在循环声明中的该空格中使用空白语句:< / p>
for(; w < smallest; w++)