首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个使用了goto loop语句改成for或者while语句的有关问题

2013-10-01 
一个使用了goto loop语句改成for或者while语句的问题代码很简单,如下所示。就是想让用户输入任意长的一串整

一个使用了goto loop语句改成for或者while语句的问题
代码很简单,如下所示。

就是想让用户输入任意长的一串整数,存放入向量intvec中,以Ctrl+Z结束。由于还有后续操作,所以需要保证用户输入了至少一个整数,于是当用户仅仅输入Ctrl+Z时,需要对他提出警告,让他重新输入。可是这样的loop语句怎么改成for语句或者while语句啊?当然原有的功能不能变。想了很久也想不出来。


//
#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;
}

}
for 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状态。
[解决办法]
引用:
外层套个死循环, 别忘记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;
}



楼主好好研究研究, 给你写了一个例子.

热点排行