c++填充数组问题

C++ filling array issue

本文关键字:问题 数组 填充 c++      更新时间:2023-10-16

我有一个基于用户输入填充数组的函数

程序在这个测试用例中工作得很好,但是它要求用户多输入一个数字。

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);
}

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

在循环外请求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;
}

请更改:

  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的

SENTIEL以外的字符初始化next,然后在index递增之前读取next

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

你也可以这样做,

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

如果第一个输入是SENTIEL,你将不会进入循环