0

ユーザーが数値 n を入力しなければならないこの状況に取り組もうとしています。その後、同じ行に n 個の数字を入力します。したがって、私のプログラムは、ユーザーが入力を続ける前にこの数値 n を知る必要があります。これにより、プログラムは、n の後に入力されたこれらの数値を保存するために必要な動的配列の大きさを知ることができます。(これらすべてが 1 行で行われることが重要です)。

以下を試してみましたが、うまくいかないようです。

int r; 
cin >> r;

//CL is a member function of a certain class
CL.R = r;
CL.create(r); //this is a member function creates the needed dynamic arrays E and F used bellow 

int u, v;
for (int j = 0; j < r; j++)
{
   cin >> u >> v;
   CL.E[j] = u;
   CL.F[j] = v;
}
4

1 に答える 1

2

通常どおり、1 行で実行できます。

#include <string>
#include <sstream>
#include <iostream>
#include <limits>

using namespace std;

int main()
{
  int *array;
  string line;
  getline(cin,line); //read the entire line
  int size;
  istringstream iss(line);
  if (!(iss >> size))
  {
    //error, user did not input a proper size
  }
  else
  {
    //be sure to check that size > 0
    array = new int[size];
    for (int count = 0 ; count < size ; count++)
    {
      //we put each input in the array
      if (!(iss >> array[count]))
      {
        //this input was not an integer, we reset the stream to a good state and ignore the input
        iss.clear();
        iss.ignore(numeric_limits<streamsize>::max(),' ');
      }
    }
    cout << "Array contains:" << endl;
    for (int i = 0 ; i < size ; i++)
    {
      cout << array[i] << ' ' << flush;
    }
    delete[] (array);
  }
}

これがデモンストレーションです。入力が 1 行であることがわかります6 1 2 3 4 5 6

繰り返しますが、すべてを確認したわけではないので、必要な方法で処理してください。

編集:読み取り不良の後にストリームのリセットを追加しました。

于 2013-06-05T17:27:41.597 に答える