Пользовательский ввод через cin.getline - PullRequest
0 голосов
/ 04 марта 2020

Я написал код, в котором пользователю предлагается ввести строку текста длиной до 132 символов (размер массива 133 для \ 0 в конце массива).

Я использовал, пока l oop чтобы поймать, если пользователь ничего не вводил и нажал return.

#include <iostream>
using namespace std;

const short SIZE = 133;

int main()
{
    char InputArray[SIZE];
    cout << "Enter a line of text up to 132 characters: " << endl;
    cin.getline(InputArray, SIZE);
    count = strlen(InputArray);

    while (count == 0)
    {
        cout << "You did not enter any entry! Try again." << endl;
        cout << "Please enter a line of text up to 132 characters.: " << endl;
        cin.getline(InputArray, SIZE);
        count = strlen(InputArray);
    }

cout << "You had entered: " << InputArray << endl;
cout << "The character count was: " << count << endl;

system ('pause');

return 0;
}

Как я могу поймать пользователя, если он go превышает размер массива? и сгенерируйте текст сообщения о том, что введенные пользователем данные неверны, и попросите их снова обратиться к cin.getline?

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2020

Вы можете использовать функцию get. Пожалуйста, смотрите здесь . Это будет читать только столько данных, сколько вы хотите.

Пример:

#include <iostream>

constexpr size_t numberOfBytes = 6;

int main() {

    std::cout << "\nPlease enter up to " << numberOfBytes-1 << " characters:  ";
    char data[numberOfBytes];
    std::cin.get(data, numberOfBytes);

    std::cout << "\nEntered: " << data << "\n";
    return 0;
}

Если вы хотите прочитать любое количество символов, а затем проверить размер, затем используйте std::string , Вы должны сделать в любом случае.

Итак:

std::string s{};
std::cin >> s;
if (s.length() > ....) {
....
}
...