in
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 $
Конечно, вы также можете определитьфункция шаблона, чтобы не быть liпередано в 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