Как запросить целочисленный ввод у пользователя, пока он не введет пустую строку в C ++? - PullRequest
1 голос
/ 01 октября 2019

Так что мне нужно хранить пользовательские вводы в векторе, пока он не введет пустую строку (или неверный ввод). Я пытался преобразовать ввод в строку, а затем сравнить ее с пустой строкой, но это не сработало. Вот код:

int input;
vector<int> v;
do
{
    cout << "Write a number!" << endl;
    cin >> input;
    v.push_back(input);
} while (to_string(input) != "");

Есть ли способ сделать это?

ОБНОВЛЕНИЕ

Спасибо вам большое за вашу помощь! Второй ответ решил все мои проблемы, а первый помог мне понять логическую основу этого.

Ответы [ 2 ]

1 голос
/ 01 октября 2019

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

std::string input;
std::vector<int> v;
std::getline(std::cin, input);
while(!input.empty())
{
    int number = std::stoi(input);
    v.push_back(number);
    std::getline(std::cin, input);
}

Обратите внимание, что std::cin не будет работать, потому что он игнорирует пробелы (включая символ новой строки). Кроме того, смешивание std:: cin >> с std::getline является плохой идеей

0 голосов
/ 01 октября 2019

Использовать стандартную функцию std::getline. Вот демонстрационная программа

#include <iostream>
#include <string>
#include <vector>

int main() 
{
    std::vector<int> v;

    while ( true )
    {
        std::cout << "Enter a number (Enter - exit): ";
        std::string line;

        if ( not std::getline( std::cin, line ) or line.empty() ) break;

        try
        {
            int value = std::stoi( line );
            v.push_back( value );
        }
        catch ( ... )
        {
            std::cout << "Not an integer number\n";
        }           
    }

    for ( const auto &item : v ) std::cout << item << ' ';
    std::cout << '\n';

    return 0;
}

Ее вывод может выглядеть как

Enter a number (Enter - exit): 1
Enter a number (Enter - exit): 2
Enter a number (Enter - exit): 3
Enter a number (Enter - exit): A
Not an integer number
Enter a number (Enter - exit): 4
Enter a number (Enter - exit): 5
Enter a number (Enter - exit): 
1 2 3 4 5
...