>> 双精度数组的运算符?

Posted

技术标签:

【中文标题】>> 双精度数组的运算符?【英文标题】:>> operator on array of doubles? 【发布时间】:2019-04-01 14:29:30 【问题描述】:

将数据输入数组的问题。

我正在使用 Dev C++ 执行和编译。下面是我的代码问题所在:

for (int k=0;k<=149;k++)                                               // k - scanning through Y within single file #i
        for (int l=0;l<=199;l++)                                           // l - scanning through X within single file #i
            inp >> X[l]>> Y[k]>> Z>> Mx[l][k]>> My[l][k]>> Mz[l][k];

Z 没有缺少下标,它就是这样设计的。

完整的错误代码:

[Error] no match for 'operator>>' (operand types are
'std::basic_istream<char>::__istream_type aka std::basic_istream<char>' and 'double [2]')

欢迎任何建议谢谢。

完整代码:

#pragma warning(disable:4786)
#include <cstdio>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cstring>

using namespace std;
string filename(int filenumber);
int main () 

    char *flnmptr;
    string str,tmpr;
    char flnm[50];

                                    !!! make sure that the array dimensions for input data are right - that might screw the output files
                                    dimensions are written in the 2nd header line of the input file

    double X[150], Y[200], Z[2], Mx[150][200][2], My[150][200][2], Mz[100][100][2], time;                               // data from file 
    // double hX[5001], vY[5001], hMx[5001],hMy[5001],hMz[5001], vMx[5001], vMy[5001], vMz[5001]; // data to be written to file
    //int xcnt, ycnt;            // variable to count how many values will be written to a file
    const int N=600;             //number of files
    //const int ptN=20;          // number of points in the line
    const double timestep=1e-14; // time step of files
    const double X0=2.749313e-1;      // X coordinate of line to read into vertical stripe output
    const double Y0=-9.614638e-1;      // Y coordinate of line to read into horizontal stripe output

ofstream outp("SWstripeCoupledCorner50difference10_120GHz.txt");        //opening output file 
    if (!outp)
        cout << "Can't open file.\n";
        return 1;
    
    cout<<"Reading file #: ";

    outp.setf (ios::scientific ); // set the output format 

for (int i=1;i<=N;i++)
    std::strcpy(flnm,"");
    tmpr=filename(i);
    flnmptr=&tmpr[0];
    std::strcpy(flnm,flnmptr);

    ifstream inp;
    inp.open(flnm);                 // opens the file
    if(!inp)                        // if file couldn't be opened
     
        cerr << "Error: file could not be opened" << endl;
        exit(1);
    

    std::getline(inp,str,'\n');
    std::getline(inp,str,'\n');
    inp.setf (ios::scientific);

    for (int k=0;k<=149;k++)                                               // k - scanning through Y within single file #i
        for (int l=0;l<=199;l++)                                           // l - scanning through X within single file #i
            inp >> X[l]>> Y[k]>> Z>> Mx[l][k]>> My[l][k]>> Mz[l][k];
        
    

【问题讨论】:

请粘贴完整代码。 inp 是什么类型? XYZMxMyMz 的具体类型是什么? 请提供minimal reproducible example。从错误看来,您正在尝试使用operator&gt;&gt; 读取数组。没有这样的内置运算符,您应该考虑在循环中读取此类数组的元素。 好的。我会发布完整的代码 啊,我想我明白了。我将深入研究解释数组和循环的文献,并尝试应用于我的代码。谢谢。 【参考方案1】:

你说过

Z 没有缺少下标,它就是这样设计的。

但在您的代码中,Z 被声明为double[2]

错误信息看起来很吓人

[错误] 'operator>>' 不匹配(操作数类型为 'std::basic_istream::__istream_type aka std::basic_istream' 和 'double [2]')

但它必不可少的意思是:

[错误] 'operator>>' 不匹配(操作数类型为 'std::ifstream' 和 'double [2]')

您必须将Z 设为单个double 或通过inp &gt;&gt; Z[i] 之类的索引访问Z考虑或将问题简化为minimalistic 版本。

【讨论】:

感谢您的建议!我会考虑 Z。我想我有点心不在焉。 我不再收到错误消息。感谢您的帮助。

以上是关于>> 双精度数组的运算符?的主要内容,如果未能解决你的问题,请参考以下文章

高精度运算

第二周学习总结

AcWing算法基础课排序 二分 高精度 前缀和 差分 双指针 位运算 离散化 区间合并

c学习 - 数据类型运算符与表达式

双精度数组上的 SIMD?

为啥Java在使用“加号”运算符时会执行从双精度到整数的隐式类型转换? [复制]