【发布时间】:2015-08-02 00:58:00
【问题描述】:
我的代码有问题。有 while 循环,当输入不是数字时,例如字符数据,所以这个循环每次都使用相同的选择值。 这是一个用户应该选择其中一个变体的列表。选择是用户的选择。应该只有整数值,我的字符有问题。
例如: 选择=一个; 所以我永远无法改变它,因为循环不起作用。 如果选择 = 2,效果很好,我可以在循环工作时更改选择。
int main()
{
setlocale(LC_ALL, "Russian");
string fname;
Data object;
do
{
std::cout << "Введите имя файла: ";
out << "Введите имя файла: ";
cin >> fname;
out << fname;
object.CreateAndRecordToFile(fname);
}
while (nameisright == false);
std::cout << "Создан файл для записи " << object.ffullname << endl;
out.open(object.ffullname, ofstream::out);// открываю созданный файл и говорю, что хочу в него записывать
int ch1, ch2;
bool prov = true;
int choice;
while (prov)
{
std::cout << "Выберите, пожалуйста, метод решения СЛАУ:" << endl;
out << "Выберите, пожалуйста, метод решения СЛАУ:";
std::cout << "1. Метод Гаусса \n";
out << "1. Метод Гаусса \n";
std::cout << "2. Метод LU разложения\n";
out << "2. Метод LU разложения\n";
std::cout << "3. Выход\n";
out << "3. Выход\n";
std::cout << "Ваш выбор: ";
out << "Ваш выбор: ";
cin >> choice;
//char ccc[200];
//cin >> ccc;
/*while (false){
if (strlen(ccc) != 0){
for (int i = 0; i < strlen(ccc); i++) {
if (!isdigit(ccc[1])){
std::cout << ccc[i] << " is not numeric.\n";
return false;
}
}
}
}*/
//else
//choice = stoi(ccc);
//out << ccc;
//check(choice);
switch (choice)
{
case 1: // Гаусс
{
std::cout << "Выберите, пожалуйста, метод ввода данных:" << endl;
out << "Выберите, пожалуйста, метод ввода данных: ";
std::cout << "1. Ввод данных с клавиатуры \n";
out << "1. Ввод данных с клавиатуры \n";
std::cout << "2. Ввод данных из файла \n";
out << "2. Ввод данных из файла\n";
std::cout << "3. Выход\n";
out << "3. Выход\n";
std::cout << "Ваш выбор: ";
out << "Ваш выбор: ";
cin >> ch1;
out << ch1;
switch (ch1)
{
case 1:
object.Size();
object.Init();
object.MatrixInPut();
object.InitAndInputVector();
object.printAll();
object.GaussElimination();
object.printResultGauss();
break;
case 2:
object.ReadingSize();
object.Init();
object.ReadingMatrixFromFile();
object.ReadingVectorFromFile();
object.printAll();
object.GaussElimination();
object.printResultGauss();
break;
case 3: // Просто прощайте
std::cout << endl;
out << endl;
std::cout << "Спасибо, что были с нами!\n";
out << "Спасибо, что были с нами!\n";
prov = false;
break;
default: // На случай фейлов
std::cout << endl;
out << endl;
std::cout << "Ошибка, некорректный ввод, повторите ввод.\n";
out << "Ошибка, некорректный ввод, повторите ввод.\n";
break;
}
break;
case 2: // ЛУ
{
std::cout << "Выберите, пожалуйста, метод ввода данных:" << endl;
out << "Выберите, пожалуйста, метод ввода данных: ";
std::cout << "1. Ввод данных с клавиатуры \n";
out << "1. Ввод данных с клавиатуры \n";
std::cout << "2. Ввод данных из файла \n";
out << "2. Ввод данных из файла\n";
std::cout << "3. Выход\n";
out << "3. Выход\n";
std::cout << "Ваш выбор: ";
out << "Ваш выбор: ";
cin >> ch2;
out << ch2;
switch (ch2)
{
case 1:
object.Size();
object.Init();
object.MatrixInPut();
object.printMatrix();
object.LUdecomposition();
object.printLU();
break;
case 2:
object.ReadingSize();
object.Init();
object.ReadingMatrixFromFile();
object.printMatrix();
object.LUdecomposition();
object.printLU();
break;
case 3: // Просто прощайте
std::cout << endl;
out << endl;
std::cout << "Спасибо, что были с нами!\n";
out << "Спасибо, что были с нами!\n";
prov = false;
break;
default: // На случай фейлов
std::cout << endl;
out << endl;
std::cout << "Ошибка, некорректный ввод, повторите ввод.\n";
out << "Ошибка, некорректный ввод, повторите ввод.\n";
break;
}
break;
case 3: // Просто прощайте
std::cout << endl;
out << endl;
std::cout << "Спасибо, что были с нами!\n";
out << "Спасибо, что были с нами!\n";
prov = false;
break;
default: // На случай фейлов
std::cout << endl;
out << endl;
std::cout << "Ошибка, некорректный ввод, повторите ввод.\n";
out << "Ошибка, некорректный ввод, повторите ввод.\n";
//choice = 0;
//prov = false;
}
}
out.close();// закрываю файл
}
}
}
【问题讨论】:
-
请将其设为SSCCE
-
@RichardCritten 我知道,我看到我只输入一次选择,但每次都应该。我无法理解。我只是需要一些帮助,伙计们..
-
@NathanOliver 我会的,这是我的第一篇文章。
标签: c++ validation input while-loop iostream