繁体   English   中英

在C ++程序中无输入后如何退出

[英]how to exit after no input in a c++ program+

嗨,大家好,我是C ++的新手,我只是写了这段代码来查找数字数组的最小值/最大值。
我只是想知道我该如何做。 灵活的条目数(我的意思是用户应该能够输入尽可能多的条目,而无需指定开头的条目数)
这是代码,但无法正常工作,有人可以帮忙吗? 感谢代码:

#include <iostream>
using namespace std;
int main(){

    cout<<"Program to calculate max/min/second max\n";
    int *A;
    A=new int[5];
    bool flag=false;
    int x=0,i=0;
    cout<<"Enter the numbers\n";

    do{

        cin>>x;
        if(x=='\0'){
            flag=true;
        }
        *(A+i)=x;
        i++;

    }
    while(!flag);

    for(int j=0;j<i;j++){


        cout<<*(A+j)<<"\n";

    }

    return 0;
}

您感到困惑,按Enter键只会给您空终止符。 它不会。 根据您的平台,它将为您提供回车/换行(Win中为\\r\\n \\n ,* ix中为\\n )。 最好的方法是让他们使用“ q”之类的字母退出或使用“ -1”之类的数字,然后进行比较。

对于初学者(在任何情况下都使用C和C ++而言),动态内存分配都是一个棘手的话题。最简单的方法是让用户指定多少个条目,但是您不希望这样做。

否则,在数组上使用向量类可能会更好(比直接使用指针更容易解决)。

http://www.cplusplus.com/reference/stl/vector/是一个很好的起点。 查看创建向量的语法和push_back()成员函数以完成任务。

祝好运,

SegFaults McGee

表示用户应该能够输入尽可能多的条目,而无需指定开头的条目

通过上述要求和您拥有的代码,您可以在一个数组中输入不超过5个元素。

do{ 
    cin>>x;
    if(x=='\0'){
       flag=true;
    }
    *(A+i)=x;
    i++;
}while(!flag);

使用std::vector代替它为您隐式管理内存的要求。

您将必须使用某种可变长度的数据结构,而Vector是使用C ++的最佳选择。 因此,代替您的固定长度数组:

int *A;
A=new int[5];

使用这样的向量:

std::vector<int> input;

然后向其中添加值,请使用以下命令:

input.push_back(10);

本页上有一个使用向量的示例。

如果您使用

std::vector<int> a;

然后输入变成简单

while (std::cin >> x)
    a.push_back(x);

然后,用户在输入所有数字后可以按^ D(Unix / Linux / etc)或^ Z(DOS / Win),或按如下方式使用程序:

echo 1 4 22 | program
program < input_file

如果要用空行表示输入的结尾,请使用输入验证:

std::string line;
while (getline(std::cin, line))
{
    char c;
    std::istringstream iss(line);
    int x;
    if (iss >> x)
    {
        a.push_back(x);
        char c;
        if (iss >> c)
        {
            std::cerr << "unexpected character '" << c << "' in line '" << line << "', terminating\n";
            exit(EXIT_FAILURE);
        }
    }
    else if (!iss.eof())
        break;  // empty line...
    else
    {
        std::cerr << "unexpected characters in line '" << line << "', terminating\n";
        exit(EXIT_FAILURE);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM