鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 超级卡布达

[已解决]同样的代码从文件读数据,把数组换成用new定义的就出错了

[复制链接]
发表于 2020-4-29 00:28:47 | 显示全部楼层    本楼为最佳答案   
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<sstream>

#include<string.h>

using namespace std;

void test() {
    ifstream manning("manning.asc", ios::in);
    if (!manning.is_open()) {
        cout << "文件打开失败" << endl;
        exit(-1);
    }

    std::string name[6];
    int ncols, nrows, cellsize, NODATA_value;
    double xllcorner, yllcorner;
    manning >> name[0] >> ncols;
    manning >> name[1] >> nrows;
    manning >> name[2] >> xllcorner;
    manning >> name[3] >> yllcorner;
    manning >> name[4] >> cellsize;
    manning >> name[5] >> NODATA_value;

    double **array = new double *[nrows];
    for(int i = 0; i < nrows; ++i) {
        array[i] = new double[ncols];
    }

    std::string line;
    for(int y = 0; y < nrows; ++y) {
        getline(manning, line);
        std::stringstream ss(line);
        for(int x = 0; x < ncols; ++x) {
            ss >> array[y][x];
        }
    }

    // print
    std::cout << name[0] <<" " << ncols << std::endl;
    std::cout << name[1] << " " << nrows << std::endl;
    std::cout << name[2] << " " << xllcorner << std::endl;
    std::cout << name[3] << " " << yllcorner << std::endl;
    std::cout << name[4] << " " << cellsize << std::endl;
    std::cout << name[5] << " " << NODATA_value << std::endl;
    /*for(int y = 0; y < nrows; ++y) {
        for(int x = 0; x < ncols; ++x) {
            std::cout << array[y][x] << " ";
        }
        std::cout << std::endl;
    }*/

    for(int i = 0; i < nrows; ++i) {
        delete[] array[i];
    }
    delete[] array;

    manning.close();
}

#if 0
void test()
{
    double** array = new double* [543];//array1 用来存储从gauges中读到的数据。
    int i = 0, j = 0, line = 0;
    for (i = 0; i < 543; i++)
    {
        array[i] = new double[220];
    }

    //double array[543][220];
    //memset(array, 0, sizeof(array));

    string lineStr;
    //char* end;
    ifstream manning;
    manning.open("manning.asc", ios::in);
    if (!manning.is_open())
    {
        cout << "文件打开失败" << endl;
        exit(-1);
    }

    /*i = 0;
    while (getline(manning, lineStr))
    {
        if (++line <= 6)
            continue;
        stringstream ss(lineStr);
        string str;
        j = 0;
        while (getline(ss, str, ' '))
        {
            //array[i][j] = atof(const_cast<const char*> (str.c_str()));
            array[i][j] = atof(str.c_str());
            j++;
        }
        i++;
    } */
    i = 0;
    while (getline(manning, lineStr))
    {
        if (++line <= 6)
            continue;
        stringstream ss(lineStr);
        j = 0;
        while( ss >> array[i][j++])
            ;
        i++;
    }

    manning.close();
    for (int i = 0; i < 543; i++)
    {
        for (int j = 0; j < 220; j++)
        {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }

    for (i = 0; i < 543; i++)
    {
        delete[] array[i];

    }
    delete[] array;
}
#endif

int main()
{
    test();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 00:30:00 | 显示全部楼层
$ ./main
ncols 543
nrows 220
xllcorner 488469
yllcorner 3.79707e+06
cellsize 2
NODATA_value -9999
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 00:31:26 | 显示全部楼层
ncols         543
nrows         220
xllcorner     488469.3190918
yllcorner     3797068.373291
cellsize      2
NODATA_value  -9999
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 14:41:09 | 显示全部楼层
5W的数据不算大,普通电脑跑应该没问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 22:36:44 | 显示全部楼层



                               
登录/注册后可看大图

你好,冒昧打扰,请问存这些数据的数组,我想判断数组中第一列的每一个数是不是50的整数倍。直接写
array[i][0] % 50 == 0 这种判断条件不行,我搜了一下 取余必须是整数,请问有什么其他的好的办法吗?数组定义是double,里面的数字也有整有零的,可能是1, 32.55, 50,  100.088  这种的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 23:17:28 | 显示全部楼层
超级卡布达 发表于 2020-4-29 22:36
你好,冒昧打扰,请问存这些数据的数组,我想判断数组中第一列的每一个数是不是50的整数倍。直接写
...

https://www.baidu.com/s?wd=浮点数取余&pn=0&oq=浮点数取余&tn=48020221_10_hao_pg&ie=utf-8&rsv_idx=1&rsv_pq=99562fbe00041e21&rsv_t=51bdIOgBloxfHa2L%2FcwNooxLXsNZxALy0ASJUR6IXEf2kxgdzj4Xd5guDg9UTh2lYT5Tdf8Roj7q
https://zhidao.baidu.com/question/314258298.html?sort=11&rn=5&pn=0#wgt-answers
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 00:40:20 | 显示全部楼层

这样呀,好的。多谢多谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 19:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表