gpt4 book ai didi

c++ - 在 C++ 中显示大小未知的 'double' 数组

转载 作者:行者123 更新时间:2023-11-28 02:10:14 25 4
gpt4 key购买 nike

更新 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.14double 类型,任何 float 值在传递给可变 C 函数时都会提升为 double .仅在上下文强加要求的情况下使用 float,例如一个 C API,或者在有限的内存中存储无数的值。

  • 编码:使用原始数组和表达式。
    使用 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++ - 在 C++ 中显示大小未知的 'double' 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35965614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com