如題,事先有一個excel電子表格,表格里存了一個m*n的資料,在VC6.0里添加代碼可以讀取出m*n的全部資料。現在要實作這樣一個功能,動態讀取n1至n2范圍內某一列的資料,并將這些資料存入到動態陣列中去,其中0<n1<n2<m,并且求出動態陣列中所有元素的和,這里n1和n2是通過對話框里的編輯控制元件輸入的。看過一些例程后,本人采用形如 int *p=new int[n2-n1+1]的方式創建了一維動態陣列,本來以為比較簡單,但是讀取資料逐個賦值時發現,陣列只有第一個元素有值,后面的沒有值,貌似是地址值,反復查找問題,還是沒有解決,請教論壇里的高手了
uj5u.com熱心網友回復:
你創建的是個一維陣列根據你的描述我感覺你應該使用二維陣列
uj5u.com熱心網友回復:
僅供參考:#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int **newarr2d(int rows,int cols) {
int **p,i;
p=(int **)malloc(rows*sizeof(int *));
if (NULL==p) exit(1);
for (i=0;i<rows;i++) {
p[i]=(int *)malloc(cols*sizeof(int));
if (NULL==p[i]) exit(1);
}
return p;
}
void deletearr2d(int **p,int rows) {
int i;
for (i=0;i<rows;i++) {
free(p[i]);
}
free(p);
}
int main() {
int **arr2d,i,j,r,c;
r=4;
c=5;
//在堆中開辟一個4×5的二維int陣列
arr2d=newarr2d(r,c);
for (i=0;i<r;i++) {
for (j=0;j<c;j++) {
arr2d[i][j]=i*c+j;
}
}
for (i=0;i<r;i++) {
for (j=0;j<c;j++) {
printf(" %2d",arr2d[i][j]);
}
printf("\n");
}
deletearr2d(arr2d,r);
r=6;
c=3;
//在堆中開辟一個6×3的二維int陣列
arr2d=newarr2d(r,c);
for (i=0;i<r;i++) {
for (j=0;j<c;j++) {
arr2d[i][j]=i*c+j;
}
}
for (i=0;i<r;i++) {
for (j=0;j<c;j++) {
printf(" %2d",arr2d[i][j]);
}
printf("\n");
}
deletearr2d(arr2d,r);
return 0;
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
// 0 1 2
// 3 4 5
// 6 7 8
// 9 10 11
// 12 13 14
// 15 16 17
//
uj5u.com熱心網友回復:
一維陣列絕對夠用了,我就是想把表格中某一列的元素,就是整數存到這個陣列里,然后陣列的長度是通過對話框中輸入的兩個數字之差決定的,也就是說在運行時才能確定這個陣列的長度,現在的問題是,我用new申請的記憶體里只有第一個元素有值。后來用vector試了一下,也是這樣的結果,只有第一個元素有值,后面的元素就是地址值。請問您遇到這種情況嗎
uj5u.com熱心網友回復:
趙老師,我單獨建個檔案用new和vector做動態一維陣列也可以通過,就是放在我那個函式中就不行,無論是new還是vector,都是第一個元素有值,后面的元素沒有值,尤其是vector,后面的元素是地址值,我確實找不到原因,請老師幫忙
uj5u.com熱心網友回復:
二維陣列用vector<vector<int> > arr2d;uj5u.com熱心網友回復:
搜COleSafeArray exceluj5u.com熱心網友回復:
趙老師,我不用二維陣列,就用一維動態陣列,現在的問題是,回圈賦值的時候,不管是用vector還是new方法,都只有第一個元素有值,后面的元素是地址值,應該是沒有分配到記憶體?我單獨建個檔案,隨便粘貼網上一段類似代碼,執行起來都沒有問題,但是把這段代碼放到我的函式里就不行了,我現在還沒有找出原因,這是我的困惑之處,期待你的回復
uj5u.com熱心網友回復:
我已經可以從excel里面讀取所有資料了,現在是在創建一維動態陣列的時候出了問題,好像是記憶體沒有申請成功,詳見給趙老師的回復,謝謝你的回答
uj5u.com熱心網友回復:
設定斷點 查看 元素個數是多少個?uj5u.com熱心網友回復:
你的陣列是int *p=new int[n2-n1+1]
如果n2=3,n1=2;
那么陣列就是2個元素
你一列資料就2個元素?
uj5u.com熱心網友回復:
小心駛得萬年船。請判斷用戶輸入的值的有效范圍。
“多一少一”問題占程式員常犯錯誤的10%以上!
避免“多一少一”問題的方法之一是將比如<10甚至<5的數代入程式片斷,掰手指頭心算驗證一下程式到底應該寫為
x、x-1、x+1中的哪個?
<、<=、==、>、>=中的哪個?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/105271.html
標籤:基礎類
