我有一个根据用户输入填充数组的函数
该程序在此测试用例中运行良好,但它要求用户多一个号码。
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);
}
这会返回正确的数字,但还有一个要问。
答案 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,则不会进入循环。