为什么我的单行输入仅通过循环部分读取

Why is my single line input only partially read by the loop?

本文关键字:循环部 读取 我的 单行 输入 为什么      更新时间:2023-10-16

首先,我在字符'geotype'

中获得开关的输入
char geotype;
cin>>geotype;

然后,我得到点数的数量,然后是单个坐标,带有for循环。

如果我的代码:

,这是有问题的部分
int i;
double xp[n], yp[n];
switch(geotype):
{     
     .
     .
     .
     case 'P':
        cin>>n;
        for(i=0; i<n; ++i)
        {
            cin >> xp[i] >> yp[i];
            cout << "i = " << i <<" ";
            cout <<"xp = " << xp[i] <<" yp = "<< yp[i]<<endl;
        }
        .
        .
        .
        break;
    .
    .
    .
}

我的输入是:

P 2 3 -2 -1 4

我的输出是:

i = 0 xp = -2 yp = -2
i = 1 xp = 4 yp = 4

为什么3&amp;-1跳过?

另外,如何-2&amp;4重复,因为它们仅在输入中发生一次。

预先感谢!

我想这是错误:

double xp[n], yp[n];

因此,您的n可能是目前的0,并且创建零尺寸的数组。由于它们的尺寸为零,因此yp = xp + 0 = xp的位置。因此,ypxp指向同一位置。由于没有绑定检查,因此您在范围之外写作,并且xp[i]的位置与yp[i]相同。

解决方案是

int* xp, *yp;
// When handling P
xp = new int[n];
yp = new int[n];

或更好地使用向量。