一个使用了goto loop语句改成for或者while语句的问题
代码很简单,如下所示。
就是想让用户输入任意长的一串整数,存放入向量intvec中,以Ctrl+Z结束。由于还有后续操作,所以需要保证用户输入了至少一个整数,于是当用户仅仅输入Ctrl+Z时,需要对他提出警告,让他重新输入。可是这样的loop语句怎么改成for语句或者while语句啊?当然原有的功能不能变。想了很久也想不出来。
for loop
//
#include <iostream>
#include <vector>
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
vector<int> intvec;
int elemt;
cout<<"Input as many integers as you wish; terminate with Ctrl+Z:\n";
loop:
cin.clear();
while(cin>>elemt)
{
intvec.push_back(elemt);
}
if(intvec.size()==0)
{
cout<<"\nNo! You must at least input one integer! Do it again!\n";
goto loop;
}
}
[解决办法]
//
do
{
cin.clear();
while(cin>>elemt)
{
intvec.push_back(elemt);
}
if(intvec.size()==0)
cout<<"\nNo! You must at least input one integer! Do it again!\n";
}while(intvec.size() == 0);
[解决办法]
楼上起的真早!
你的while是一个循环,loop-----goto loop也 是一个循环,
双层循环
[解决办法]
for(;;){
cin.clear();
while(cin>>elemt){
intvec.push_back(elemt);
}
if(intvec.size() > 0) break;
cout<<"\nNo! You must at least input one integer! Do it again!\n";
}
[解决办法]
外层套个死循环, 别忘记clear清理一下EOF状态。
[解决办法]
#include <iostream>
#include <vector>
#include <limits>
int inputElements(std::istream &istream, std::vector<int> &result)
{
int elem;
while (istream >> elem)
result.push_back(elem);
if (!istream.eof())
return -1;
if (!result.size())
return 0;
return 1;
}
void userInterface(std::istream &istream, std::ostream &ostream, std::vector<int> &result)
{
result.clear();
ostream << "Input as many integers as you wish; terminate with Ctrl+Z:" << std::endl;
while (true) {
int ret = inputElements(istream, result);
switch (ret) {
case -1:
ostream << "Input non-integer, error!" << std::endl;
break;
case 0:
ostream << "No! You must at least input one integer! Do it again!" << std::endl;
break;
default:
ostream << "Works well" << std::endl;
return;
}
result.clear();
istream.clear();
istream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
int main(int argc, char *argv[])
{
std::vector<int> result;
userInterface(std::cin, std::cout, result);
for (size_t i = 0; i < result.size(); ++i) {
std::cout << result[i] << " ";
}
std::cout << std::endl;
return 0;
}
楼主好好研究研究, 给你写了一个例子.