更新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;
}
答案 0 :(得分:2)
给定的示例代码
#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" )
是愚蠢的,适得其反的&amp;非便携。
在您正在使用的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";
}
}
答案 1 :(得分:0)
arr
,否则代码将访问具有零元素的0
越界。arr
&#34; (实际上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;
}
答案 2 :(得分:0)
如果你有C ++ 11或更高版本,请使用auto
替换
for(int i=0; i<count; i++)
{
cout<<arr[i]<<endl;
}
与
for(auto v: arr){
cout << v << endl;
}
请记住,您需要支持C ++ 11的编译器才能使用auto。
如果C ++&lt; 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;
}