У меня проблема с этим кодом. Кажется, что все работает нормально, но когда вы вводите что-то вроде этого: 123aaaddfa123, тогда программа примет это как двойное значение. Любые идеи, чтобы избежать этой проблемы? Спасибо.C++ - cin позволяет сохранять нечисловые в двойном типе
int main()
{
const char MAX = 5;
cout << "Weight of your fishes (maximum 5)" << endl;
double fishes[MAX];
char count = 0;
while (count < MAX)
{
cout << count + 1 << ". fish: " << endl;
if (cin >> fishes[count])
count++;
else {
cin.clear();
if (cin.get() == 'q') //no more fishes = quit
break;
while (cin.get() != '\n') //clearing cin buffer
continue;
}
}
if (count > 0) {
double sum = 0;
for (int i = 0; i < MAX; ++i) {
sum += fishes[i];
}
cout << "Avarage weight of your " << (int)count << " fishes is: " << sum/count << " KG" << endl;
}
}
Вы можете прочитать строку 'string' и преобразовать ее, используя [' std :: stod() '] (http://en.cppreference.com/w/cpp/string/basic_string/stof), что исключение в таком случае. –
@ πάνταῥεῖ Действительно? Согласно cppreference, 'std :: stod' принимает ** как можно больше символов **, чтобы сформировать допустимое представление с плавающей запятой и преобразует их в значение с плавающей запятой. – Lingxi
Посмотрите [здесь] (http://stackoverflow.com/a/10349885/3410935) – Glapa