1

我一直在解决一个问题,我需要在 CPP 中的两个单独数组中的下一行中使用空格分隔的输入(<=10),然后是其他一组空格分隔的输入。为此,我在 cpp 中使用 getline 函数。我面临的问题是接受输入的最后一行。我无法弄清楚我面临什么问题。随着最后一行的到来,输出停止并等待我输入一些内容,然后它提供输出。这里是我的代码..

while(test--)
{

    int len[100];
    int pos[100];


    string a,b,code;
        // int t=1;


    cin>>code;


    cin.ignore();//ignores the next cin and waits till a is not input


    getline(cin,a);


  //  deque<char> code1;

   // code1.assign(code.begin(),code.end());




    int k=0;
    int t=a.length();
    for(int i=0;i<t/2+1;i++)//converts two n length arrays pos[] and len[] 
    {

        scanf("%d",&len[i]);

    while(a[k]==' ')
    {
        k++;

    }




            pos[i]=a[k]-48;
            k++;
               }



        //int c;}

`

4

1 回答 1

1

您的代码令人困惑,看起来它不应该工作。您正在使用 cin/scanf 的阻塞输入,因此如果标准输入上没有准备好输入,它等待您是正常的。

这就是您尝试做的事情:

  • 将该行读入一个名为ausing的字符串getline
  • a使用 将数据从数组中读取scanf

然而,scanf并不是为此而生的。该scanf函数从键盘获取输入。我认为您想使用sscanf从 string 输入值a

但更好的是使用stringstreams

起初我以为你试图从命令行读取输入的长度,所以我建议这样做:

size_t arr_len;

cin >> arr_len;

if (cin.fail())
{
    cerr << "Input error getting length" << endl;
    exit(1);
}

int* len = new int[arr_len];
int* pos = new int[arr_len];

for (int count = 0; count < arr_len; count++)
{
    cin >> len[count];

    if (cin.fail())
    {
        cerr << "Input error on value number " << count << " of len" << endl;
        exit(1);
    }        
}


for (int count = 0; count < arr_len; count++)
{
    cin >> pos[count];

    if (cin.fail())
    {
        cerr << "Input error on value number " << count  << " of pos" << endl;
        exit(1);
    }
}

delete [] pos;
delete [] len;

然后我更仔细地看了看。看起来这就是你想要做的。我正在使用std::vector而不是int[],但如果你真的想要,改变它并不难。

string line;

getline(cin, line);

if (cin.fail())
{
    cout << "Failure reading first line" << endl;
    exit(1);
}

istringstream iss;

iss.str(line);

vector<int> len;

size_t elements = 0;

while (!iss.eof())
{
    int num;
    iss >> num;

    elements++;

    if (iss.fail())
    {
        cerr << "Error reading element number " << elements << " in len array" << endl;
    }

    len.push_back(num);
}

getline(cin, line);

if (cin.fail())
{
    cout << "Failure reading second line" << endl;
    exit(1);
}

iss.clear();
iss.str(line);

vector<int> pos;

elements = 0;

while (!iss.eof())
{
    int num;
    iss >> num;

    elements++;

    if (iss.fail())
    {
        cerr << "Error reading element number " << elements << " in pos array" << endl;
    }

    pos.push_back(num);
}
于 2012-10-13T13:42:25.223 回答