我正在遵循《编程:原理与实践C +》中的一个示例,但是当我尝试显示矢量时,我得到的基本上是噪声(串联的随机数)。任何帮助将不胜感激。
我尝试使用数据类型(int,unsigned int),endl(而不是\ n)和轻微的语法更改。似乎没有任何作用
std::vector<double>sumbank;
int vectorsize = 0;
std::cout << "Enter amount of digits you will be storing \n";
std::cin >> vectorsize;
for (unsigned int a=0; a < vectorsize; ++a)
{
double sum = 0;
std::cout << "Please Enter Your First Number\n";
std::cin >> sum;
sumbank.push_back(sum);
}
for (unsigned int b = 0; b < sumbank.size(); ++b)
{
std::cout << sumbank[b] << '/n';
}
答案 0 :(得分:0)
在
std::cout << sumbank[b] << '/n';
您的换行符错误,必须为'\n'
或更高的std::endl
您的消息
std::cout << "Enter amount of digits you will be storing \n";
为什么是数字?您输入double
和
std::cout << "Please Enter Your First Number\n";
为什么是“第一”?
您还比较了带符号和无符号的数字
我建议您检查输入是否成功,以便if (! (cin >> var)) ...error...
,否则,如果输入无效值,则所有后续输入将不执行任何操作
编辑您的评论“ 我试图了解刷新缓冲区的作用,工作原理以及为什么有用”:
拥有
int vectorsize = 0;
std::cin >> vectorsize;
如果输入的不是数字,则流是错误的,并且在该状态下您无法成功读取它,因此要再次读取数字,您需要清除错误,并且当然绕过无效的输入仍然存在于流中。
由于您在代码中读取了多个数字,因此具有专用功能而不重复代码可能会很有用,
#include <iostream>
// return false in case of EOF, else true
bool readInt(std::istream & is, int & v)
{
while (! (is >> v)) {
// clear error
is.clear();
// bypass invalid input
std::string s;
if (!(is >> s)) {
// end of file
return false;
}
std::cerr << "invalid number ('" << s << "'), redo" << std::endl;
}
return true;
}
int main()
{
int v;
std::cout << "enter an integer : ";
if (!readInt(std::cin, v))
std::cout << "EOF!" << std::endl;
else
std::cout << "the number is " << v << std::endl;
}
编译和执行:
pi@raspberrypi:/tmp $ g++ -pedantic -Wextra -Wall c.cc
pi@raspberrypi:/tmp $ ./a.out
enter an integer : aze
invalid number ('aze'), redo
23
the number is 23
pi@raspberrypi:/tmp $ echo "aze qsd" | ./a.out
enter an integer : invalid number ('aze'), redo
invalid number ('qsd'), redo
EOF!
pi@raspberrypi:/tmp $
当然,您还可以定义一个模板函数,而不仅限于 int :
#include <iostream>
// return false in case of EOF, else true
template <typename T>
bool readIt(std::istream & is, T & v)
{
while (! (is >> v)) {
// clear error
is.clear();
// bypass invalid input
std::string s;
if (!(is >> s)) {
// end of file
return false;
}
std::cerr << "invalid input ('" << s << "'), redo" << std::endl;
}
return true;
}
int main()
{
int v;
std::cout << "enter an integer : ";
if (!readIt(std::cin, v)) {
std::cout << "EOF!" << std::endl;
return -1;
}
else
std::cout << "the integer is " << v << std::endl;
float f;
std::cout << "enter a float : ";
if (!readIt(std::cin, f)) {
std::cout << "EOF!" << std::endl;
return -1;
}
else
std::cout << "the float is " << f << std::endl;
return 0;
}
编译和执行:
pi@raspberrypi:/tmp $ g++ -pedantic -Wextra -Wall t.cc
pi@raspberrypi:/tmp $ ./a.out
enter an integer : 12
the integer is 12
enter a float : 12.34
the float is 12.34
pi@raspberrypi:/tmp $
pi@raspberrypi:/tmp $
pi@raspberrypi:/tmp $ ./a.out
enter an integer : a
invalid input ('a'), redo
12
the integer is 12
enter a float : b
invalid input ('b'), redo
12.34
the float is 12.34