C ++填充数组问题

时间:2013-03-26 07:16:21

标签: c++

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

该程序在此测试用例中运行良好,但它要求用户多一个号码。

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 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

使用next之外的其他字符初始化字符SENTIEL,然后在next递增之前阅读index

char next = ' ';
const char SENTIEL ='.';
int index=0;
while ((next !=SENTIEL) && (index < size))
{
  cin >> next;
  a[index] = next;
  index++;
}

答案 2 :(得分:0)

请改变:

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

}

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

    }

还会在循环外删除frist cin >> next;,并显然初始化next,并且没关系

答案 3 :(得分:0)

或者你也可以这样做,

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

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