【问题标题】:Vectors, Pointers, Classes and EoF Loops (C++)向量、指针、类和 EoF 循环 (C++)
【发布时间】:2012-04-01 06:25:56
【问题描述】:

我正在尝试获取一个向量来存储“复杂”类的对象。

这就是我尝试存储它的方式:

ifstream values;
values.open("h://values.txt");

if(!values)
{
    cout<<"Error: cannot open "<<"values.txt"<<endl<<endl;
}
else 
{

    //Initialise list
    vector<Complex> v;
    Complex *c1;

    double a,b,d=0,e=0;
    char c;

    int count=0;    



    while(values)
    {
        values>>c>>a>>b;
        c1=new Complex;

        v.push_back(*c1);

        cout<<c<<"  "<<a<<" "<<b<<endl;


        switch (c)
            {
                case 'r':
                case 'R':
                case 'p':
                case 'P':
                    {
                        //Call constructor

                        v[count].setType(c);  


                        switch (c)
                        {
                            case 'r':
                            case 'R':
                                {   v[count].setReal(a);
                                    v[count].setImaginary(b);
                                    v[count].topolar(a,b,d,e);
                                    break;
                                }
                            case 'p':
                            case'P':
                                {   v[count].setLength(a);
                                    v[count].setAngle(b);
                                    v[count].frompolar(d,e,a,b);
                                    break;
                                }
                            default:
                                {   cout<<"Type Error"<<endl;
                                    break;
                                }
                        }

                        count++;
                        break;
                    }

                default:
                    {
                        //error message
                        cout<<" Failed input type, ensure all of type 'r' or 'p'"<< endl;
                        cout<<"Programme Closing"<<endl;
                        break;
                    }


            };
    }

虽然这将读取我程序中的信息,但它坚持读取最后一行两次(我将 cout 放入此循环中,以便更容易查看哪些数字在哪里)。我曾尝试使用 for 循环,但因为我希望它一直运行到文件末尾,所以我认为我必须使用 while 循环,但我可能错了。

我的主管说过 c1 在每个循环中都被覆盖,但我认为这应该没问题,因为信息在被下一行覆盖之前传递给向量,所以我有点困惑.

下一个问题是,当我再次尝试打印出所有信息时,在上面显示的循环之外(例如,允许在打印之前进行操作)它会一遍又一遍地打印相同的内容,直到 for 循环到达数...

  int y;
int z;
while(y!=3)
{
    cout<< " What would you like to do?"<<endl;
    cout<< " Type the number of the option you would like"<<endl;
    cout<< " 1. Show all numbers in polar form"<<endl;
    cout<< " 2. Show all numbers in rectangular form"<<endl;
    cout<< " 3. Show all numbers in both forms"<<endl;
    cout<< " 4. Convert a number to its conjugate"<<endl;
    cout<< " 5. Exit"<<endl;
    cin>>y;

    switch(y)
    {
    case 1:
        for(z=0; z<count;z++)
        { 
            v[z].getLength();
            v[z].getAngle();
        cout<< a<<"   "<<b<<endl;};
        break;

    case 2:
        for (z=0; z!=count;z++)
        { 
            v[z].getReal();
            v[z].getImaginary();


        };
        break;

    case 3:
        cout<<" Real    Imaginary     |   Length    Angle   |  Original Type"<<endl;

        for(z=0; z!=count;z++)
        { v[z].getLength();
          v[z].getAngle();
                         v[z].getReal();
                    v[z].getImaginary();
                        cout<<a<<"     "<<b<<"     "<<d<<"       "<<e<<endl;

如果你们中的任何人尝试运行该程序:

#include "Class definitions.h"
#include <iostream>
#include <fstream>
#include <iomanip> 
#include <string.h>
#include <cmath>
#include <vector>
using namespace std;

任何帮助将不胜感激!

非常感谢! H x

【问题讨论】:

    标签: c++ class object loops vector


    【解决方案1】:

    输入是否成功只知道输入之后,而不是之前。做完之后

    values>>c>>a>>b;
    

    即使输入失败(例如因为文件结尾),您也可以使用这些值。将测试放在while循环的条件下:

    while ( values >> c >> a >> b )
    

    并且您的代码应该可以工作。 (这是否是解决问题的最佳方法是另一个问题。我可能会使用std::getline(),然后使用std::istringstream 来解析我读过的行。更容易错误恢复。)

    【讨论】:

    • 谢谢你的第一个工作,现在我只需要弄清楚如何让我的函数为 cout 返回正确的信息,最好将 a 和 b 重置为 v [z] 函数中的长度/角度等然后在主程序中进行 cout 或者有更好的方法吗?
    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多