在
std::cout << sumbank[b] << '/n';
你的换行错误,必须是 '\n' 或更好的 std::endl
您的留言
std::cout << "Enter amount of digits you will be storing \n";
为什么是数字?你输入双倍
在
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