0

複数のコンピューターに配置した特定のプログラムをインストールするための c++ プログラムを作成しています。ユーザーが必要なインストールを選択できるようにするセクションをコードに追加しています。私は C++ に非常に慣れていないため、ユーザー入力の取り込みに問題があります。これを行うためのより良い方法の提案を受け入れます。いくつかあると確信しています。

    int allOrSelect;

std::cout << "Press 1 if you want all software, press 2 if you want to select";
std::cin >> allOrSelect;

if(allOrSelect == 1)
{
    std::cout<< "all software installing ..." <<std::endl;
}

if(allOrSelect == 2)
{
    std::cout << "Please select from the following list";
    std::cout << "software 1";
    std::cout << "software 2";
    std::cout << "software 3";
    std::cout << "software 4";
    std::cout << "Type the appropriate numbers separated by space or comma";
//this is where trouble starts
//I've tried a few different ways to take the user input
//i tried using vector array, but never got it working, but i figured there had to 
//be a simpler way.  also tried variations of cin.whatever
}

さらに情報が必要な場合はお知らせください。事前に感謝します。

4

1 に答える 1

0

ユーザー入力がコンマ区切りの値(たとえば、「1、2、3」)であると仮定すると、入力はstd::istringstreamクラスを使用してトークン化する必要があります。std::set重複する値を防ぐために使用されます。

コードは実際には入力検証を実装していないことに注意してください。

#include <set>
#include <iostream>
#include <sstream>

// Read the string representation:
// "1, 2, 3"
std::string input;
std::getline(std::cin, input);

// Convert to set of integers.
std::set<int> selection;
std::istringstream ss(input);
std::string softItem;

while (std::getline(ss, softItem, ','))
{
    std::stringstream stm;
    stm.str(softItem);

    int i;
    if (!(stm >> i))
    {
        // TODO: handle input error!
        std::cout << "Input error!" << std::endl;
        break;
    }
    selection.insert(i);
}

// Logic:
// The selection set contains the user selection.
于 2012-08-02T19:02:58.727 に答える