在C ++中传递int变量 - 错误检查不返回值

时间:2014-11-14 16:38:43

标签: c++ variables

好吧所以我试图在用户输入变量时检查变量,但是它们似乎并不坚持。现在错误检查似乎有效,但变量在某处丢失'num = 0'

我从其他来源复制了一些代码,但我不确定它出错的地方。

我想输入一个数字,检查它是否为整数,然后将所述整数返回给变量'num'。

#include <iostream>

using namespace std;

int checkCin(int var)       {//open function

bool ok = false;//set variable to false
while (!ok)/*if variable is false, loop*/               {//open loop 

    cin >> var;

    //this will cheack if anything is in variable other than an integer
    if(!cin.fail() && (cin.peek()==EOF || cin.peek()=='\n'))        {//open if
        ok = true;//this will end loop
        return var;
}//close if

    //this will clear the cin and ignor whats left - ignoring this part stops an infinate loop cycle 

    else        {//open else
        cin.clear();
        cin.ignore(256,'\n');
        cout << "Error, enter a number" << std::endl;

    }//close else
}//close loop

//prepared for next input
ok = false;

}//close function

int main()    {

int num = 0;

checkCin(num);

cout << num << endl;

system("pause");
return 0;
}

1 个答案:

答案 0 :(得分:1)

您正在通过

从函数返回读取的数字
return var;

在某些时候,但您没有在主函数中使用结果。你刚才

checkCin(num);

在那里,扔掉了结果。此外,输入参数实际上没有意义,因为您传递了值,因此无法修改函数内main中看到的值。您可以做的是在没有参数的情况下声明checkCin并在main中指定返回值,即

num = checkCin();

对于第一次阅读您的计划的人来说,这是最明显的,因为checkCin不需要var的原始值,因此不需要传递英寸

另一种方法是将checkCin声明为引用并且不返回任何内容,即void checkCin(int& var)。然后你可以将代码保存在main中,因为现在该函数实际上可以修改从main传入的变量num。但是,对于只返回像int这样的单个简单数据的函数,第二种解决方案非常罕见。

这里&#39;清理了你的代码版本(你也看到了正确的缩进,&#34;开环&#34;,&#34;关闭循环&#34;等等。评论不会是必要的,因为嵌套级别很明显):

#include <iostream>

using namespace std;

int checkCin() {//open function
    int var;
    while (true) { //open loop 
        cin >> var;
        //this will cheack if anything is in variable other than an integer
        if(!cin.fail() && (cin.peek()==EOF || cin.peek()=='\n')) {//open if
            return var;
        } else { //open else
            cin.clear();
            cin.ignore(256,'\n');
            cout << "Error, enter a number" << std::endl;
        } //close else
    } //close loop
} //close function

int main()    {
    int num = checkCin();
    cout << num << endl;
    system("pause");
    return 0;
}