大家好我是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;
}
答案 0 :(得分:3)
你很困惑,按Enter键只会给你空终止符。它不会。根据您的平台,它将为您提供回车/换行(Win中为\r\n
,* ix中为\n
。这样做的最好方法是让他们使用像'q'这样的字母来戒烟或者像-1这样的数字,然后比较它。
答案 1 :(得分:1)
动态内存分配对于初级程序员来说是一个棘手的主题(在任何情况下都是C和C ++。)最简单的方法是让用户指定多少条目,但是你不希望这样。
否则在数组上使用向量类可能更好(并且比直接使用指针更容易解决。)
http://www.cplusplus.com/reference/stl/vector/是个好地方。查看用于创建向量的语法和用于完成任务的push_back()
成员函数。
祝你好运,
SegFaults McGee
答案 2 :(得分:0)
意味着用户应该能够输入尽可能多的条目,而无需指定起始
中的条目数
根据上述要求和您拥有的代码,您可以为数组输入不超过5个元素。
do{
cin>>x;
if(x=='\0'){
flag=true;
}
*(A+i)=x;
i++;
}while(!flag);
使用std::vector
代替隐式管理内存的要求。
答案 3 :(得分:0)
您必须使用某种可变长度的数据结构,而Vector是最佳选择,因为您使用的是C ++。因此,而不是你的固定长度数组:
int *A;
A=new int[5];
使用这样的矢量:
std::vector<int> input;
然后要为此添加值,请使用以下命令:
input.push_back(10);
答案 4 :(得分:0)
如果您使用
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);
}
}