2013-04-22 4 views
2

В моем предыдущем вопросе я получил этот ответ для работы, чтобы, если пользователь вводит более 5 символов в имени нации, он выдает ошибку.C++ - Как вы возвращаетесь после ввода пользователем?

#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; 
    } 
} 

Я хочу, чтобы его так, что он будет возвращаться к «соиЬ < <, что это имя ...» после того, как он выдает ошибку.

Спасибо!

Кто-то ответил на мой предыдущий вопрос, как в комментариях, но я не получил его на работу/Я не знаю, как и где его поместить в мой код.

ответ

1
while(1){ 
    cin >> nationname; 
    if (nationname.size() <= maxchar) 
     break; 
    else{ 
     cout << "The input is too long." << endl; 
    } 
} 
+0

Спасибо! Наконец, я получил его на работу. – Leroterr1

0

добавьте цикл 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; 
} 
0

Вы в основном нуждаетесь в цикле, чтобы просить пользователя ввести новый ответ, когда длина строки ввода слишком велика.

попробовать следующее (после вашей оригинальной логики):

#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; 
} 
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 
2

По крайней мере, для меня, ответы вы получили до сих пор выглядят немного неуклюжими. ИМО, это призывает к малопользованные, много пренебрегали сделать/в то время как цикл:

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, когда вы хотите сбросить поток.

0
#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; 

}