[英]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.