提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@
今天做一道输出偶数和的问题,具体问题如下
我想要批量把数据输入数组,可是不知道输入的数是多少个,所以我想数组后面没有的默认为零,等于0时跳出,不知道为什么输出成了数组的地址;
代码如下(示例):
#include <iostream>
using namespace std;
int main()
{
int a[100],b=0,c=0;
for (int i=0;i<99;i++){
cin >> a[i];
if (a[i]==0){
break;
}else if(a[i]%2==0){
c+=a[i];
}
b++;
cout << a[i] <<endl;
}
cout << a[4] <<endl;
//cout << c <<endl;
return 0;
}
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
这里我试验了两次,三个数时正确,四个数时不知为何多输出了一个地址
2
3
6
8117864
2
3
6
8
8117864 //这是怎么出来的呀
8117864
这里应该没有输出a[4],他不知道为什么出来了
请求各位帮我解答一下问题,4个数据比3个数据为什么多输出了一个地址,不太改变现在代码,应该如何修改,谢谢各位
输入数据那里 ,输入了两次分别是 2 3 6和2 3 6 8
我这里用上面的代码测试,没问题。代码改动了吗?
代码块
#include <stdio.h>
#include <stdlib.h>
int binsearch(int x, int v[], int n);
int main()
{
int x=3;
int v[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n=10;
int a;
a=binsearch(x, v, n);
printf("%d\n", a);
system("pause");
return 0;
}
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low=0;
high=n-1;
mid=(low+high)/2;
while((low<=high)&&(x!=v[mid])){
(x<v[mid]) ? high=mid-1 : low=mid+1;
mid=(low+high)/2;
}
if (x==v[mid])
return mid;
else
return -1;
}
如果程序设计有错误或更简洁的方法,欢迎并感谢您指正出示,谢谢!
首先,需要对代码进行分析。问题出现在循环结束条件的判断上。当前的条件是a[i-1] != 0
,也就是只要输入的数不为零,就继续循环输入。然而,当输入的数组中包含了4个数时,循环会继续执行一次。此时i
的值为4,而a[4]
是数组a
中的第5个元素,它超出了数组的范围。
为了确保循环在输入4个数时结束,可以将循环结束条件修改为i < 10
,表示只要i
小于10,就继续循环输入。这样即使输入的数小于10个,循环也会在最大输入个数(10个)时结束。
此外,为了确保没有输入的数默认为零,可以在初始化数组时将其元素都设置为零。可以通过memset
函数将数组中所有元素都设置为零。修改后的代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int a[10];
memset(a, 0, sizeof(a)); // 将数组a的元素都设置为零
int i = 0;
cout << "请输入数据,以零结束:" << endl;
do {
cin >> a[i];
i++;
} while (i < 10);
cout << "输入的数据为:" << endl;
for (int j = 0; j < 10; j++) {
cout << a[j] << " ";
}
return 0;
}
这样修改后的代码,无论输入几个数,都会保证循环输入了10个数或者用户输入了零时结束,并且没有输入的数会默认为零。