好吧所以我试图在用户输入变量时检查变量,但是它们似乎并不坚持。现在错误检查似乎有效,但变量在某处丢失'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;
}
答案 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;
}