C++数组 用printf打印出来为0 而用cout打印可正常显示数值

本文探讨了在使用C++动态分配内存的方法创建二维数组后,分别采用C和C++方式进行打印时出现的不同结果。指出C++可以向下兼容C,但C不能完全向上兼容C++,并解释了这一现象的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,定义一个二维数组:

targetBuffer = (int **)malloc(1052 * sizeof(int *));   

    for (int i = 0; i < 1052; i++)

        targetBuffer[i] = (int *)malloc(1473 * sizeof(int));

在赋值之后,想打印该数组之中不为0的数值,首先采用了printf打印方法:

if (targetBuffer[i][j] != 0)
{
printf("%f\t",targetBuffer[i][j]);

}

打印结果如下:


采用cout打印方法:

if (targetBuffer[i][j] != 0)
{
cout << targetBuffer[i][j] << endl;

}

打印结果如下:



这是因为C++可以完全向下兼容C,而C无法完全向上兼容C++,这里的数组创建采用的是C++的动态分配方法,因此采用C打印时会出现上述问题。

### C++数组的输入和输出 #### 单个字符数组的输入输出 对于单个字符数组,在C++中可以使用`cin`对象配合循环结构逐个读取字符并存储至字符数组中。为了防止越界访问,通常会在读取前设定好边界条件。 ```cpp #include <iostream> using namespace std; int main() { const int SIZE = 100; char chArray[SIZE]; cout << "请输入不多于99个字符:" << endl; for (int i = 0; ; ++i) { cin >> noskipws >> chArray[i]; // 不跳过空白符 if (chArray[i] == '\n' || i >= SIZE - 2) break; } chArray[sizeof(chArray)-1]='\0';//确保字符串结束标志 cout << "您输入的内容为:"; puts(chArray); } ``` 此段代码展示了如何通过控制台接收用户输入的一串字符,并将其保存在一个预定义长度的字符数组里[^1]。 #### 整型数组的输入输出 当处理整型或其他数值类型的数组时,可以通过指定分隔符的方式实现更灵活的数据录入。下面的例子演示了怎样在一行为单位的情况下接受由特定符号分割开来的若干个整数,并把它们依次填入动态创建好的向量容器之中: ```cpp #include <vector> #include <iostream> using namespace std; int main(){ int count; char separator; vector<int> numbers; cout<<"请输入要输入多少个整数:"; cin>>count; numbers.resize(count); for(int index=0;index<count-1;++index){ cin>>numbers[index]>>separator;//每次读两个值,一个是数字另一个是间隔符 } cin>>numbers[count-1];//最后一个不需要跟后面的分隔符配对 cout<<"\n已成功记录如下数据:"<<endl; for(auto element : numbers){ cout<<element<<'\t'; } } ``` 上述程序片段实现了从命令行界面获取一系列以非字母字符作为区别的正负整数值的功能[^2]。 #### 使用 `printf` 和 `scanf` 进行基本I/O操作 除了面向对象风格的标准流接口外,传统的格式化输入输出函数同样适用于简单场景下的快速开发需求。比如利用`printf()`打印信息到屏幕以及借助`scanf()`完成键盘上的交互式采集工作。 ```cpp #include<stdio.h> #define MAX_LENGTH 50 void printIntArray(const int* array,int length){ printf("数组元素有:\n"); for(register unsigned short pos=0;pos<length;pos++){ printf("%d ",array[pos]); } } int main(void){ static int sampleData[MAX_LENGTH]={}; size_t itemCount; printf("准备填充%d个整数...\n",MAX_LENGTH); scanf("%zu",&itemCount);//注意这里采用%zu匹配size_t类型变量 while(itemCount--){ scanf("%d",sampleData+itemCount); } printIntArray(sampleData,sizeof(sampleData)/sizeof(*sampleData)); } ``` 这段源码说明了基于C风格的过程调用来管理静态分配的空间内的整形序列的方法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值