C++编程问题,使用数组进行输入输出出现错误

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@

文章目录

  • 问题
  • 一、问题
  • 二、使用步骤
  • 1.引入库
  • 2.输入数据
  • 3.输出数据
  • 总结


问题

今天做一道输出偶数和的问题,具体问题如下


一、问题

我想要批量把数据输入数组,可是不知道输入的数是多少个,所以我想数组后面没有的默认为零,等于0时跳出,不知道为什么输出成了数组的地址;

二、使用步骤

1.引入库

代码如下(示例):

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

2.输入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

这里我试验了两次,三个数时正确,四个数时不知为何多输出了一个地址


3.输出数据

2
3
6
8117864

2
3
6
8
8117864  //这是怎么出来的呀
8117864     

这里应该没有输出a[4],他不知道为什么出来了


总结

请求各位帮我解答一下问题,4个数据比3个数据为什么多输出了一个地址,不太改变现在代码,应该如何修改,谢谢各位

输入数据那里 ,输入了两次分别是 2 3 6和2 3 6 8

我这里用上面的代码测试,没问题。代码改动了吗?

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7465015
  • 除此之外, 这篇博客: 练习 3-1 在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。中的 练习 3-1 在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    代码块

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

    如果程序设计有错误或更简洁的方法,欢迎并感谢您指正出示,谢谢!

  • 以下回答来自chatgpt:

    首先,需要对代码进行分析。问题出现在循环结束条件的判断上。当前的条件是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个数或者用户输入了零时结束,并且没有输入的数会默认为零。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^