В моем предыдущем вопросе я получил этот ответ для работы, так что если пользователь введет более 5 символов в имени страны, он выведет ошибку.
#include <iostream>
#include <iomanip>
int main()
{
using namespace std;
const int maxchar = 5;
string nationname;
cout << "What is the name of your nation?" << endl;
cin >> nationname;
if (nationname.size() > maxchar)
{
cout << "The input is too long." << endl;
return 1;
}
}
Я хочу, чтобы он возвращался к << что за имя … «после того, как выдает ошибку.
Спасибо!
Кто-то ответил на мой предыдущий вопрос, как в комментариях, но я не получил его к работе / я не знаю, как и где поместить это в мой код.
while(1){
cin >> nationname;
if (nationname.size() <= maxchar)
break;
else{
cout << "The input is too long." << endl;
}
}
По крайней мере, для меня ответы, которые вы получили до сих пор, выглядят немного неуклюже. IMO, это требует малоиспользуемого, очень запущенного цикла do / while:
bool show_error() {
return std::cout << "The input is too long.\n";
}
int main() {
static const int maxchar = 5;
std::string nationname;
do {
std::cout << "What is the name of your nation?\n";
} while (std::cin >> nationname && nationname.size() > maxchar && show_error());
}
Что касается того, почему я думаю, что это лучше: во-первых, если это не является совершенно необоснованным, гораздо лучше записать условие для цикла как условие цикла, а не как while (1)
сопровождаемый условным break
где-то внутри петли. Во-вторых, если вы всегда хотите, чтобы цикл выполнялся хотя бы один раз, do
/while
петля является правильным для работы. while
Цикл следует использовать, когда есть разумная вероятность, что цикл вообще не будет выполняться (когда / если условие ложно). Наконец, хотя это, возможно, довольно незначительный момент, он также проверяет результат каждой операции ввода и вывода и прерывает цикл в случае неудачи. Если вы этого не сделаете, неправильный ввод может привести к бесконечному циклу, когда попытка чтения не удастся, но оставляет данные во входном потоке, поэтому следующая итерация снова не удастся (без ожидания ввода пользователем дополнительных данных). ).
Как в стороне: я бы посоветовал не использовать std::endl
так много (или, возможно, вообще). Получить в привычку использовать \n
когда вы просто хотите новую строку, и std::flush
когда / если вы хотите очистить поток.
добавьте цикл while в вашу функцию, чтобы продолжить ввод, если неправильно.
int main()
{
using namespace std;
const int maxchar = 5;
string nationname;
while(1)
{
cout << "What is the name of your nation?" << endl;
cin >> nationname;
if (nationname.size() > maxchar)
{
cout << "The input is too long." << endl;
}
else
{
break;
}
}
return 1;
}
В основном вам нужен цикл, чтобы постоянно просить пользователя ввести новый ответ, когда длина входной строки слишком велика.
попробуйте следующее (следуя вашей оригинальной логике):
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int maxchar = 5;
string nationname;
while (true)
{
cout << "What is the name of your nation?" << endl;
cin >> nationname;
if (nationname.size() > maxchar)
{
cout << "The input is too long." << endl;
continue;
}
else
{
cout << "input nation is: " << nationname <<endl;
break;
}
}
return 0;
}
const int maxchar = 5;
string nationname;
while(!(nationname.size()>0 && nationname.size()<maxchar)){
nationname="";
cout << "The input has to be smaller than "<<maxchar<<" characters and has"<<" to contain at least 1 character."cin >> nationname;
}
//nationname is as supposed to be
#include "stdafx.h"#include <iostream>
#include <string>
int main()
{
//declare a string variable called
nationName
std::string nationName;std::cout << " Please enter youre
Nation name,\n Names must be no
longer than 20 characters in
length\n and must not contain any
numbers. . ." "\n""\n";
//Get input from user
getline(std::cin, nationName);
//validate the length of the name
variable, if it is greater than 20
characters display an error
while (name.length() >= 20)
{
std::cout << " sorry you have
entered incorect data\n Please try
again . . . ""\n""\n";
getline(std::cin, name);
}
//if the name is entered correctly
loop exists and displays
std::cout << nationName <<
std::endl;
return 0;
}