在 c++ 中显示大小未知的 'double' 数字数组
Display an array of 'double' numbers with unknown size in c++
更新 1:我需要帮助完成本文的第二部分。我要求用户输入数字并使用零停止。但是我想显示该代码。这就是我走多远,因为当我想显示它时,它会给我不同的数字。我忽略了用户错误,假设他们第一次输入时是正确的。但我确实希望他们输入负数。
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
float data;
int count=0;
int*arr=new int[count];
//get amount of numbers inputted
cout<<"Please enter floating point data.n";
cout<<"After the last number has been entered press 0 (zero) n";
cin>>data;
for (; data != 0 ; ++count)
{
cin>>data;
}
cout<<count<<endl;
cout<<endl;
//display back data
cout<<"The numbers enterd are: "<<endl;
for(int i=0; i<count; i++)
{
cout<<arr[i]<<endl;
}
cout<<endl;
system ("pause");
return 0;
}
**更新 2:**此代码是我正在处理的一个更大项目的一部分。我的教授永远不会看到他只关心它是否有效的代码。在这种情况下,我的代码设计不是优先事项。此外,我以前从未使用过std::vector
,所以我需要另一种方法来做到这一点。但这就是我所做的,它工作得很好。我还评论了delete []arr
因为如果我不这样做,我的代码将无法正常运行。
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
double data;
int count=0;
double *arr =new double[count];
//get data
cout<<"Please enter floating point data."<<endl;
cout<<"After the last number has been entered press 0 (zero)"<<endl;
do
{
cin>>arr[count];
data = arr[count];
count++;
}while(data != 0);
//display back data
cout<<"The numbers entered are: "<<endl;
for(int i=0; i<(count-1); i++)
{
cout<<arr[i]<<endl;
}
//delete []arr;
system ("pause");
return 0;
}
给定的示例代码,
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
float data;
int count=0;
int*arr=new int[count];
//get amount of numbers inputted
cout<<"Please enter floating point data.n";
cout<<"After the last number has been entered press 0 (zero) n";
cin>>data;
for (; data != 0 ; ++count)
{
cin>>data;
}
cout<<count<<endl;
cout<<endl;
//display back data
cout<<"The numbers enterd are: "<<endl;
for(int i=0; i<count; i++)
{
cout<<arr[i]<<endl;
}
cout<<endl;
system ("pause");
return 0;
}
有很多问题:
编码:无缘无故地使用
float
。
C 和 C++ 中的默认浮点类型为double
。例如,文字3.14
是double
类型,任何float
值在传递给可变参数C函数时都会提升为double
。仅在上下文强加要求的情况下使用float
,例如 C API,或在有限的内存中存储大量值。编码:使用原始数组和
new
表达式。
使用std::vector
时,任务是微不足道的。一次又一次地重新发明轮子不是一个好主意。一个需要你重新发明std::vector
或其最基本特征的练习应该非常清楚这方面:这不是,所以大概不需要重新发明或它是关于什么的。设计:通过特殊值向输入端发送信号。
无法输入该值。编码:不存储数字的输入循环。
每个数字都存储在与前一个数字相同的变量中,擦除前一个数字。将数字存储在std::vector
中。例如,您可以使用push_back
方法。编码:输出换行符约定不一致。
使用endl
或"n"
作为默认值。不要随意混合它们。一致性非常重要,因为阅读代码的人,假设一个称职的程序员,必须将每次偏离既定默认值视为由于某种原因。当没有理由浪费时间和精力时。工具使用:
system( "pause" )
是愚蠢的,适得其反的和非便携式的。
在Visual Studio中,你似乎正在使用,只需通过Ctrl + F5运行程序。或者在main
的最后一个右大括号上放置一个断点,并通过 F5 在调试器中运行程序。编码:
return 0;
是多余的。
main
是唯一具有默认返回值的函数。它在 C 和 C++ 中都有。默认值 0 表示成功,将在那里使用。
具有上述几点的示例代码,加上一些,固定的。
此代码适用于 C++11 或更高版本,因此不会直接使用 Visual C++ 2010 进行编译。
我把它留给你一个练习,让你把它翻译成 C++03,这是你当前的编译器可以处理的。请考虑升级。这是一个免费工具。
#include <iostream>
#include <iomanip> // std::setw
#include <string> // std::(string, stod)
#include <vector> // std::vector
using namespace std;
using Half_float = float; // Most often a silly choice.
using Float = double; // Default in C++.
using Extended_float = long double; // Same as double in Visual C++.
auto read_line()
-> string
{ string line; getline( cin, line ); return line; }
auto main() -> int
{
cout << "Please enter floating point numbers like " << 3.15 << ", one per line.n";
cout << "After the last number just press return again (i.e. a blank line).n";
vector<Float> numbers;
for( ;; )
{
cout << "#" << numbers.size() + 1 << "? ";
string const line = read_line();
if( line.empty() )
{
break;
}
numbers.push_back( stod( line ) ); // Here you CAN do input validation.
}
cout << numbers.size() << " numbers entered.n";
cout << "n";
cout << "The numbers entered were: n";
for( int i = 0; i < int( numbers.size() ); ++i )
{
cout << setw( 3 ) << i << ": " << numbers[i] << "n";
}
}
如果您有 C++ 11 或更高版本,请使用自动
取代
for(int i=0; i<count; i++)
{
cout<<arr[i]<<endl;
}
跟
for(auto v: arr){
cout << v << endl;
}
请记住,您需要支持 C++11 的编译器才能使用 auto。
如果C++ <11,请使用 std::for_each
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
void print(float v){
cout << v << endl;
}
int main ()
{
float data;
int count=0;
std::vector<float> arr;
//get amount of numbers inputted
cout<<"Please enter floating point data.n";
cout<<"After the last number has been entered press 0 (zero) n";
while(cin>> data && data != 0)
{
arr.push_back(data);
++count;
}
cout<<count<<endl;
cout<<endl;
//display back data
cout<<"The numbers enterd are: "<<endl;
std:for_each(arr.begin(), arr.end(), print);
cout<<endl;
system ("pause");
return 0;
}
- 代码将访问
arr
的越界,它有零个元素,除非您为第一个提示输入0
。 - 您根本没有将阅读的内容分配给"元素或
arr
"(实际上arr
中不会有元素)。 - 没有理由使用
int
数组来存储float
数据。
您应该使用 std::vector
,它用作可变大小的数组。
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
int main ()
{
float data;
int count=0;
vector<float> arr;
//get amount of numbers inputted
cout<<"Please enter floating point data.n";
cout<<"After the last number has been entered press 0 (zero) n";
while(cin >> data && data != 0)
{
arr.push_back(data);
}
count = arr.size();
cout<<count<<endl;
cout<<endl;
//display back data
cout<<"The numbers enterd are: "<<endl;
for(int i=0; i<count; i++)
{
cout<<arr[i]<<endl;
}
cout<<endl;
return 0;
}
- 在c++中为double类型的数组创建一个unique_ptr
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 是否可以输入到const double数组
- 错误:数组大小表达式必须具有整型或无作用域枚举类型,而不是'double'
- 错误:无法将参数“1”的“double*”转换为“double”,错误:数组下标的类型“double[double]”无
- C++ 错误错误:数组下标的类型"双精度 [10][10][double]"无效
- 如何使用向量中包含的double[4][4]数组
- 错误:数组下标'double*[double]'的类型无效
- PTXAS 在结构数组上使用 thrust::sort 时"double is not supported"警告
- 使用double-for循环索引一维数组
- 当我从int切换到double时,数组中出现了奇怪的反馈
- 使用float 2d数组的C++内存泄漏,如果我使用double,则会消失
- 在 c++ 中显示大小未知的 'double' 数字数组
- c++mex错误:数组下标的类型“double[mwSize]”无效
- 如何在 C# 中从 com 对象返回数组(double[])
- 将表示二维数组的 std::vector<std::vector <double> >转换为 cv::Mat
- 实现动态数组数据结构时出现"double free or corruption"错误
- 将二维数组 double[][] 传递给 c# 窗口应用程序
- 声明 double* 数组时出现损坏的堆错误
- 将const double[][]数组作为参数传递给double**接口