簡體   English   中英

向量,指針,類和EoF循環(C ++)

[英]Vectors, Pointers, Classes and EoF Loops (C++)

我試圖獲得一個向量來存儲“復雜”類的對象。

這就是我試圖將其存儲的方式:

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;

任何幫助將不勝感激!!

非常感謝! 高x

輸入是否成功僅輸入之后才知道,而不是在輸入之后才知道。 做完之后

values>>c>>a>>b;

即使輸入失敗(例如由於文件結尾),也可以使用這些值。 將測試置於while循環中:

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

並且您的代碼應該可以正常工作。 (這是否是解決問題的最佳方法,這是另一個問題。我可能會使用std::getline() ,然后使用std::istringstream來解析我讀取的行。更容易進行錯誤恢復。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM