2016-05-01 4 views
1

Я должен написать программу, которая позволяет пользователю вводить до 20 имен от до 40 символов каждый.Ограничить длину строки в наборе?

Когда я пишу код, не пытаясь ограничить длину строк каким-либо образом, он работает. Но когда я пытаюсь ограничить длину строки оператором if/else, это не сработает. Я довольно новичок в C++, так что это был действительно выстрел в темноте. Что я делаю не так?

#include <iostream> 
#include <string> 
#include <set> 
#include <algorithm> 

using namespace std; 

void print(const string& name) { 
    cout << name << endl; 
} 

int main() { 
    set<string> ListOfNames; 
    cout << "Please enter up to 20 names of up to 40 characters each below:  " << endl; 
for (int i = 1; i <= 20; ++i) { 
    string name; 
    cout << i << ". "; 
    getline(cin, name); 
    if (name.size() >= 40) { 
     ListOfNames.insert(name); 
    } 
    else break; 
    cerr << "You entered more than 40 characters. Please try again."; 
} 

for_each(ListOfNames.begin(), ListOfNames.end(), &print); 
return 0; 

} 

Выход:

1. (user inputs name here) 
press any key to continue... 

EDITED КОД:

#include <iostream> 
#include <string> 
#include <set> 
#include <algorithm> 

using namespace std; 

void print(const string& name) { 
    cout << name << endl; 
} 

int main() { 
    set<string> ListOfNames; 
    cout << "Please enter up to 20 names of up to 40 characters each below:   " << endl; 
for (int i = 1; i <= 20; ++i) { 
    string name; 
    cout << i << ". "; 
    getline(cin, name); 
    if (name.size() <= 40) { 
     ListOfNames.insert(name); 
    } 
    else 
    { 
     cerr << "You entered more than 40 characters. Please try again."; 
     break; 
    } 

    for_each(ListOfNames.begin(), ListOfNames.end(), &print); 
    return 0; 
    } 
} 

ответ

0

внутри, если изменить условие name.size()> = 40

и еще после перерыва КОБ и оба го заявления должны быть внутри {}

if (name.size() <= 40) { 
    ListOfNames.insert(name); 
} 
else 
{ 
    cerr << "You entered more than 40 characters. Please try again."; 
    break; 
} 
+0

Когда я делаю это, это позволяет мне только вход 1 имя, а не все 20. Например: Вход: 1. Макс. Выход: Макс. –

+0

, пожалуйста, разместите отредактированный код. – Reshad

+0

Я отредактировал и добавил новый код в конце. –

1

Похоже, вы сказали только запустить код, если строка больше 40 не менее 40

1

Написать отдельную функцию для получения и проверки достоверности входных данных. В этой функции, убедитесь, что вход длиной менее 40 символов, и отказываются принимать его, если он не является:

std::string get_limited_string(std::string prompt, int max = 40) { 
    std::string input; 
    do { 
     std::cout << prompt; 
     std::getline(std::cin, input); 
    } while (input.size() >= max); 
    return input; 
} 
+0

Где я могу назвать эту функцию в своем коде? –

+0

Вызовите его из цикла, который собирает 20 входных строк. –

Смежные вопросы