Что бы программа не ломалась, нужно сделать проверку на число, что бы при вводе букв выводилась ошибка. Прошерстив форумы и перепробовав около 10 вариантов, так и не нашёл нужный. Подскажите, кому не сложно.
Сам код:
#include "pch.h"
#include
#include
#include
#include
#include
using namespace std;
void perevod()
{
int num, ss, sis; // ввод переменных
string t;
cout << "Введите число:" << endl;
cin >> num;
cout << "Введите си (от 0 до 36 включительно):" << endl;
cin >> ss;
sis = num;
do { // формула подсчёта
t = char(num%ss + 48 + (num%ss > 9) * 7) + t, num /= ss;
} while (num);
cout << sis << " В " << ss << " системе счисления: " << t << "\n";
cout << endl;
}
void zapic()
{
setlocale(LC_ALL, "Rus");
string path = "ss.txt";
fstream fs;
fs.open(path, fstream::in | fstream::out | fstream::app); // открытие файла
if (!fs.is_open()) // файл не открывается --->
{
cout << "Ошибка открытия файла! \n";
}
else { // если открылся
int num, ss, sis;
string t;
cout << "Введите число:" << endl;
cin >> num;
cout << "Введите си:" << endl;
cin >> ss;
sis = num;
do {
t = char(num%ss + 48 + (num%ss > 9) * 7) + t, num /= ss;
} while (num);
string msg;
int v;
cout << "Файл записан! \n";
fs << sis << " в " << ss << " системе счисления: " << t << ";" << "\n";
cout << "----------------------------------------------------------------\n";
cout << sis << " в " << ss << " системе счисления: " << t << ";" << "\n";
cout << "----------------------------------------------------------------\n";
}
fs.close();
}
void vivod()
{
setlocale(LC_ALL, "Rus");
string path = "ss.txt";
string msg;
fstream fs;
fs.open(path, fstream::in | fstream::out | fstream::app);
if (!fs.is_open())
{
cout << "Ошибка открытия файла! \n";
}
else {
cout << "Файл открыт! \n"
string line;
while (getline(fs, line)) // вывод в строку
{
cout << line << endl;
}
cout << "----------------------------------------------------------------\n";
}
}
void remove()
{
if (remove("ss.txt") != 0) {
cout << "Ошибка при удалениии\n";
cout << "----------------------------------------------------------------\n";
}
else {
cout << "----------------------------------------------------------------\n";
cout << "Файл был удален\n";
cout << "----------------------------------------------------------------\n";
}
}
void form()
{
cout << "Формула перевода: X2=An*2^n-1+An-1*2^n-2+An-2*2^n-3+...+A2*2^1+a1*2^0\n";
}
int main()
{
setlocale(LC_ALL, "Rus");
int v;
string y;
do
{
cout << "Что вы хотите сделать? \n 1 перевести\n 2 перевести и записать результат\n 3 вывести все результаты\n 4 удалить все данные\n 5 справка по формуле перевода\n";
cin >> v;
switch (v)
{
case 1:
perevod();
break;
case 2:
zapic();
break;
case 3:
vivod();
break;
case 4:
remove();
break;
case 5:
form();
break;
default:
cout << "Ошибка, такого варианта нет\n";
break;
}
cout << endl;
cout << "Продолжить? (y)\n";
cin >> y;
} while (y == "y");
}
Другие языки программирования и технологии
Как сделать проверку на букв или цифру в c++
//Вот код кому-то строчил недавно
// убрать пробелы в скобках < >
#include < cmath >
#include < iostream >
using namespace std;
int main()
{
int count;
char again;
double a, b;
do {
cout << "Hello, my dear. What are the numbers?\n";
cout << "Number 1: ";
while(!(cin >> a))
{
cin.clear();
cin.ignore (10000, '\n');
cout << "Number 1: ";
}
cin.clear();
cin.ignore (10000, '\n');
cout << "Number 2: ";
while(!(cin >> b))
{
cin.clear();
cin.ignore (10000, '\n');
cout << "Number 2: ";
}
cin.clear();
cin.ignore (10000, '\n');
cout << "What do you want to do?\n" << "1. +\n" << "2. -\n" << "3. *\n" << "4. /\n" << "5. a^b\n" << "6. a^(1/b)\n" << "7. log(a)b\n";
cout << "Your answer: ";
cin >> count;
cout << "Result = ";
switch (count)
{
case 1: cout << a + b << endl; break;
case 2: cout << a - b << endl; break;
case 3: cout << a * b << endl; break;
case 4: cout << a / b << endl; break;
case 5: cout << pow(a, b) << endl; break;
case 6: cout << pow(a, 1.0 / b) << endl; break;
case 7: cout << log(b) / log(a) << endl; break;
}
cout << "Do you want to try again? y/n\n";
cin >> again;
} while (again == 'y');
system("pause");
return 0;
}
// убрать пробелы в скобках < >
#include < cmath >
#include < iostream >
using namespace std;
int main()
{
int count;
char again;
double a, b;
do {
cout << "Hello, my dear. What are the numbers?\n";
cout << "Number 1: ";
while(!(cin >> a))
{
cin.clear();
cin.ignore (10000, '\n');
cout << "Number 1: ";
}
cin.clear();
cin.ignore (10000, '\n');
cout << "Number 2: ";
while(!(cin >> b))
{
cin.clear();
cin.ignore (10000, '\n');
cout << "Number 2: ";
}
cin.clear();
cin.ignore (10000, '\n');
cout << "What do you want to do?\n" << "1. +\n" << "2. -\n" << "3. *\n" << "4. /\n" << "5. a^b\n" << "6. a^(1/b)\n" << "7. log(a)b\n";
cout << "Your answer: ";
cin >> count;
cout << "Result = ";
switch (count)
{
case 1: cout << a + b << endl; break;
case 2: cout << a - b << endl; break;
case 3: cout << a * b << endl; break;
case 4: cout << a / b << endl; break;
case 5: cout << pow(a, b) << endl; break;
case 6: cout << pow(a, 1.0 / b) << endl; break;
case 7: cout << log(b) / log(a) << endl; break;
}
cout << "Do you want to try again? y/n\n";
cin >> again;
} while (again == 'y');
system("pause");
return 0;
}
string s;
s="23423";
int i = std::stoi(s);
s="23423";
int i = std::stoi(s);
Указываем требуемый тип принимаемых у пользователя с клавиатуры или из иных источников данных, указываем сколько значений нужно принять и функция проконтролирует корректность ввода пользователем данных.
#include <iostream>
#include <windows.h>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
template<typename T, class STREAM_>
vector<T> input_validation(STREAM_&, const size_t &);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");
cout << "Введите 5 чисел в строку через пробел ";
auto a = input_validation<double>(cin, 5u);
//Здесь указать шаблоном какой тип требуем получить у пользователя при вводе
//Аргументом передаётся сколько значений нужно принять
cout << "Полученные числа" << endl;
for (const auto &t : a)
{
cout << t << endl;
}
system("pause");
return 0;
}
template<typename T, class STREAM_>
vector<T> input_validation(STREAM_ &strm, const size_t &count_input)
{
vector<T> rez;
for (;;)
{
string input;
vector<string> words;
string word;
getline(strm, input);
for (const auto &c : input)
{
if (c == ' ')
{
if (!word.empty())
{
words.push_back(word);
word.clear();
}
}
else
{
word.push_back(c);
}
}
if (!words.empty())
{
words.push_back(word);
word.clear();
}
auto flag = true;
for (const auto &word : words)
{
stringstream ss(word);
stringstream ss2;
string str_value;
T value;
ss >> value;
ss2 << value;
ss2 >> str_value;
if (word == str_value)
{
rez.push_back(value);
}
else
{
flag = false;
break;
}
}
if (flag && rez.size() == count_input)
{
break;
}
else
{
cout << "Ошибка. Повторите ввод" << endl;
words.clear();
word.clear();
rez.clear();
}
}
return rez;
}

#include <iostream>
#include <windows.h>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
template<typename T, class STREAM_>
vector<T> input_validation(STREAM_&, const size_t &);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");
cout << "Введите 5 чисел в строку через пробел ";
auto a = input_validation<double>(cin, 5u);
//Здесь указать шаблоном какой тип требуем получить у пользователя при вводе
//Аргументом передаётся сколько значений нужно принять
cout << "Полученные числа" << endl;
for (const auto &t : a)
{
cout << t << endl;
}
system("pause");
return 0;
}
template<typename T, class STREAM_>
vector<T> input_validation(STREAM_ &strm, const size_t &count_input)
{
vector<T> rez;
for (;;)
{
string input;
vector<string> words;
string word;
getline(strm, input);
for (const auto &c : input)
{
if (c == ' ')
{
if (!word.empty())
{
words.push_back(word);
word.clear();
}
}
else
{
word.push_back(c);
}
}
if (!words.empty())
{
words.push_back(word);
word.clear();
}
auto flag = true;
for (const auto &word : words)
{
stringstream ss(word);
stringstream ss2;
string str_value;
T value;
ss >> value;
ss2 << value;
ss2 >> str_value;
if (word == str_value)
{
rez.push_back(value);
}
else
{
flag = false;
break;
}
}
if (flag && rez.size() == count_input)
{
break;
}
else
{
cout << "Ошибка. Повторите ввод" << endl;
words.clear();
word.clear();
rez.clear();
}
}
return rez;
}

Похожие вопросы
- Как в этом коде C++ в файл через каждые две буквы добавить цифру любую? За ранее огромное спасибо
- дана строка содержащая латинские буквы, русские буквы и цифры. Подсчитать количество русских букв и цифр в данной строке
- Забавная задача: сумма цифр на C без ветвления
- Буквы в цифре!!!
- требуется помощь специалистов. Ребята что мне сделать с компьтером чтобы объединить память диска C и D
- Подскажите! как на паскале можно сделать проверку, если вводишь символ то выдает ошибку об этом
- хочу стать програмистом. что нужно сделать? у меня есь программа Microsoft Visual C# 2010 Express
- Помогите сделать лабораторную работу по теме "Одномерные массивы" [C++]
- C++ Проверка правильности ввода данных.
- программа для заполнения диска беспорядочным набором цифр и букв