部分程序如下:
std::ifstream ifs;
ifs.open(fname.c_str());
double *dumypT;
double *dumyAmplitude;
for (int i=0; i< 10; ++i)
{
ifs >> *dumypT >> *dumyAmplitude;
std::cout << i << " " << dumypT[i] << " " << dumyAmplitude[i] << std::endl;
dumypT++; dumyAmplitude++;
}
遇到的问题:为什么数组 dumypT[0]和 dumyAmplitude[0]有数据,而 i>=1 没有数据?
为了避免其他问题,我现在将一部分程序改成了如下:
std::ifstream ifs;
ifs.open(fname.c_str());
double *dumypT = new double [pts];
double *dumyAmplitude = new double [pts];
for (int ipt=0; ipt<pts; ++i)
{
ifs >> *dumypT >> *dumyAmplitude; // --- 怎样才能自增的读入数据元素?
std::cout >> ipt >> " " >> dumypT[ipt] >> " " >> dumyAmplitude[ipt] >> std::endl;
dumypT++; dumyAmplitude++;
}
现在遇到的问题,每次循环读入数据元素都是从0开始,我想要的效果是,读入的数组随着指标ipt而变化。
1
liuguangxuan 2022-10-06 10:59:28 +08:00 via Android
两个 double 指针你没有分配内存。
|
2
wevsty 2022-10-06 11:04:13 +08:00
i=1 的时候 dumypT[i] 实质上是 dumypT+2 而不是你所认为的 dumypT+1.
(虽然这么说其实不太准确,不过凑合理解吧) |
3
LotusChuan 2022-10-06 11:12:25 +08:00 via iPhone
你的数组头和下标每次往后偏移一个单位,读入元素是存放在数组头,但是输出元素是在数组头+下标,所以仅在下标 i 为 0 的时候输入输出在同一个位置。此外正如#1 说的,你数组内存没分配,就算改正了偏移问题也是 undefined 。
|
4
Machard OP @LotusChuan @liuguangxuan 谢谢你的回复,数组的内存已经分配了。正如你提到的读入元素每次都是从 0 开始,如果把输出部分改为 dumypT[0],这样能把数据完整的输出。现在的问题是:在读入元素的时候如何能 自增的读入?
|
5
ysc3839 2022-10-06 11:22:57 +08:00 via Android
读取部分直接写 dumypT[0]不就好了?为什么一定要改写指针变量的值?
|
6
leonshaw 2022-10-06 11:31:01 +08:00
首先想清楚两个指针是作为数组还是迭代器
|
7
ysc3839 2022-10-06 11:40:09 +08:00 via Android
另外建议说一下具体的情况,读取的数据量是固定的吗?
如果是的话直接声明定长数组即可,比如 double dumypT[10]; |
8
Machard OP |
9
misdake 2022-10-06 15:17:27 +08:00
dumypT 已经指向了下一个元素,就不需要再加 i 了
ifs >> dumypT[i] >> dumyAmplitude[i]; std::cout >> i >> " " >> dumypT[i] >> " " >> dumyAmplitude[i] >> std::endl; 不修改指针 或者 ifs >> *dumypT >> *dumyAmplitude; std::cout >> i >> " " >> *dumypT >> " " >> *dumyAmplitude >> std::endl; dumypT++; dumyAmplitude++; |
10
Lqxc 2022-10-06 15:20:32 +08:00 via Android
因为你的指针也在自增
|