需要帮助修复程序的功能

时间:2013-10-21 04:00:56

标签: c++

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中声明最小的部分。有人可以帮我解决吗?

2 个答案:

答案 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”将被丢弃)。由于你只需要在循环中使用它,这应该是你正在寻找的。

如果要检查w是否也不小于0或大于10,可以使用以下循环:

for(int w = 0; w < 0 || w > 10, w < smallest; w++)

如果稍后需要(或者在不需要循环控制变量的其他情况下),也可以将初始w保留在函数作用域中,并在循环声明中的该空格中使用空白语句:< / p>

for(; w < smallest; w++)