0

我有一个根据用户输入填充数组的函数

该程序在这个测试用例中运行良好,但它要求用户提供比需要的多一个数字。

void fill_array(char a[], int size)
{
char next;
const char SENTIEL ='.';
int index=0;
cin >> next;


  while ((next !=SENTIEL) && (index < size))
{
   a[index] = next;
   index++;
   cin >> next;

}

cout << a[0];
cout << a[1];
cout << a[2];
cout << a[3];
cout << a[4];
cout << a[5];
cout << a[6];
cout << a[7];
cout << a[8];
cout << a[9];   
}




int main()
{
int const MAX=10;
char b[MAX];
fill_array(b,MAX);
}

这会返回正确的数字,但它还有一个要问的。

4

4 回答 4

2

您要求cin >> next在循环之外(1 次),然后您要求cin >> next size时间导致:大小 + 1 次。

你应该使用一个 for 循环(当然删除局外人cin >> next):

for (int index = 0; (next !=SENTIEL) && (index < size); index++)
{
   a[index] = next;
   cin >> next;
}
于 2013-03-26T07:20:28.433 回答
0

next使用其他字符初始化字符SENTIEL,然后读取next之前index的字符会递增。

char next = ' ';
const char SENTIEL ='.';
int index=0;
while ((next !=SENTIEL) && (index < size))
{
  cin >> next;
  a[index] = next;
  index++;
}
于 2013-03-26T07:23:28.410 回答
0

请更换:

  while ((next !=SENTIEL) && (index < size))
{
   a[index] = next;
   index++;
   cin >> next;

}

while ( ( cin >> next) && ( next !=SENTIEL) && ( index < size))
    {
       a[index] = next;
       index++;

    }

还要cin >> next;在循环外删除第一个,而且很明显是初始化next,就OK了

于 2013-03-26T07:24:27.827 回答
0

或者你可以做这样的事情,

while ((index < size) && ((cin>>next) && next!=SENTIEL) )
{
   a[index] = next;
   index++;
}

这样,如果第一个输入是 SENTIEL,您将不会进入循环。

于 2013-03-26T07:28:21.670 回答