【问题标题】:Trying to get my program to read an input file correctly 2d array [duplicate]试图让我的程序正确读取输入文件 2d 数组 [重复]
【发布时间】:2013-12-09 20:18:21
【问题描述】:

我正在尝试让我的程序正确读取我的输入文件,以下是我的输入文件,第一列是我希望用户输入的内容,然后需要从相应的行中取出值,这些值被阅读是错误的。

14、14、8、0.4、16、2.0、1.7、7、4.7、0.23、0.44、290、350

16、16、10、0.5、17、2.2、1.8、8、5.4、0.27、0.5、310、370

18、18、11、0.5、18、2.2、2.0、9、6.0、0.30、0.56、320、380

20、20、12、0.5、19、2.3、2.2、9.5、6.4、0.32、0.59、330、390

22、22、13、0.5、20、2.4、2.4、10、6.7、0.33、0.63、340、410

24、24、14、0.5、21、2.5、2.5、11、7.4、0.37、0.69、350、420

27、27、16、0.6、22、2.6、2.8、11.5、7.7、0.38、0.72、370、450

30、30、18、0.6、23、2.7、3.0、12、8.0、0.40、0.75、380、460

35、35、21、0.6、25、2.8、3.4、13、8.7、0.43、0.81、400、480

40、40、24、0.6、26、2.9、3.8、14、9.4、0.47、0.88、420、500

45、45、27、0.6、27、3.1、3.8、15、10.0、0.50、0.94、440、520

50、50、30、0.6、29、3.2、3.8、16、10.7、0.53、1.00、460、550

    ifstream soft;
    soft.open ("Softwood.txt"); //Opens the softwood text file which holds the values required for calculations 

cout <<"Please enter the strength class of the timber, excluding the letter." <<endl; 
cin >> type;

float a [12][13]; //begins the array so the input file can be read

int i, j;

for (i=0; i<12; i++)
{
    for (int j=0; j<13; j++)
        soft>>a[i][j];
}


int m=0;

while(a[m][0]!= type && m<12)
 {
m++;
 }
bendingStrength = a[m][1];
tensionParallel = a[m][2];
tensionPerpindicular = a[m][3];
compressionParallel = a[m][4];
compressionPerpindicular = a[m][5];
shearStrength = a[m][6];
elasticityParallel = a[m][7];
elasticityParallelFive = a[m][8];
elasticityPerpindicular = a[m][9];
shearModulus = a[m][10];
density = a[m][11];
meanDensity = a[m][12];

【问题讨论】:

  • 想一想哪里出了问题,然后打印一些调试语句,供初学者使用。
  • 我注意到这是您在过去 2-3 天内发布的第三个问题。也许你需要重新考虑你的程序是如何工作的。应该可以提出更动态的解决方案。

标签: c++ arrays input multidimensional-array ifstream


【解决方案1】:

阅读文件时应忽略逗号。可以这样完成:

for (i=0; i<12; i++)
{
    for (int j=0; j<13; j++)
    {
       soft >> a[i][j];
       char ch;
       soft.get(ch);
       if(ch != ',')
           soft.unget();
    }
}

【讨论】:

  • 谢谢,我已经把它放进去,但它不能识别 'cin.get(ch);' 中的 ch?
  • @user3077409 对不起,我的错:(我已经编辑了我的帖子,现在试试
  • 我刚刚尝试过,但它似乎仍然无法正确读取值,我会再看一遍,感谢您的帮助!
  • @user3077409,再试一次我已经更正了我的答案
  • 太好了,它有效!谢谢!!
【解决方案2】:
while(a[m][0]!= type && m<12)
 { 
m++;
 }

如果 m == 11,您的程序会增加 m 的值(现在 m == 12)并且您尝试将 a[12][i] 的值(对于 i 介于 1 和 12 之间)分配给一个对象。但是在 C++ 中的数组中,我们从 0 开始计算对象的数量,因此数组中的最大数字是 a[11][12]。您的程序尝试读取不存在的对象的值。

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2015-03-31
    • 2014-08-20
    相关资源
    最近更新 更多