2016-07-22 53 views
1

我的程序正在爲建模爲c字符串的變量返回垃圾值。該程序使用一個類來模擬數據類型Song。看來在設置變量時會發生錯誤。
下面列出了程序和輸出的輸入。
我對代碼的長度表示歉意。程序在返回cstring時返回垃圾值

爲什麼隨機值?

代碼

#include <iostream> 
#include <cstring> 

using namespace std; 

const int MAX_CHAR = 100; 

class Song 
{ 
public: 
    //Default constructor 
    Song(); 
    //Constructor 
    Song(char title[], char artist[], char album[], int min, int sec); 
    //Destructor 
    ~Song(); 

    //Accessor functions 
    char getTitle()const; 
    char getArtist() const; 
    char getAlbum() const; 
    int getMin() const; 
    int getSec() const; 

    //Mutator functions 
    void setTitle(const char*); 
    void setArtist(const char*); 
    void setAlbum(const char*); 
    void setMin(int); 
    void setSec(int); 

private: 
    //Member Variables 
    char title[MAX_CHAR]; 
    char artist[MAX_CHAR]; 
    char album[MAX_CHAR]; 
    int min; 
    int sec; 
}; 

Song::Song(){} 

Song::Song(char newTitle[],char newArtist[],char newAlbum[], int  newMin, int newSec) 
{ 

    strncpy(title, newTitle, 100); 
    strncpy(artist, newArtist, 100); 
    strncpy (album, newAlbum, 100); 
    min = newMin; 
    sec = newSec; 
} 


Song::~Song(){} 


//getter functions 
char Song::getTitle() const 
{ 
    return title[MAX_CHAR]; 
} 

char Song::getArtist() const 
{ 
    return artist[MAX_CHAR]; 
} 

char Song::getAlbum() const 
{ 
    return album[MAX_CHAR]; 
} 

int Song::getMin() const 
{ 
    return min; 
} 

int Song::getSec() const 
{ 
    return sec; 
} 

//setter functions 

void Song::setTitle(const char newTitle[]) 
{ 
    strcpy(title, newTitle); 
} 

void Song::setArtist(const char newArtist[]) 
{ 
    strcpy(artist, newArtist); 
} 

void Song::setAlbum(const char newAlbum[]) 
{ 
    strcpy(album, newAlbum); 
} 
void Song::setMin(int min) 
{ 
    this->min = min; 
} 

void Song::setSec(int sec) 
{ 
    this->sec = sec; 
} 

int main() 
{ 
    char newTitle[MAX_CHAR]; 
    char newArtist[MAX_CHAR]; 
    char newAlbum[MAX_CHAR]; 
    int min; 
    int sec; 

    cout << "Enter title: "; 
    cin >> newTitle; 
    cout << "Enter artist: "; 
    cin >> newArtist; 
    cout << "Enter album: "; 
    cin >> newAlbum; 
    cout << "Enter minutes: "; 
    cin >> min; 
    cout << "Enter seconds: "; 
    cin >> sec; 

    Song song; 

    song.setTitle(newTitle); 
    song.setArtist(newArtist); 
    song.setAlbum(newAlbum); 
    song.setMin(min); 
    song.setSec(sec); 

    cout << endl << "Title: " << song.getTitle() << endl << 
    "Artist: " << song.getArtist() << endl << 
    "Album: " << song.getAlbum() << endl << 
    "Minutes: " << song.getMin() << endl << 
    "Seconds: " << song.getSec() << endl; 

    return 0; 
}  

I/O

的輸入和始終如一返回錯誤的值:

//Inputs 
    Enter title: title 
    Enter artist: artist 
    Enter album: album 
    Enter minutes: 3 
    Enter seconds: 20 


    //Outputs 
    Title: a 
    Artist: a 
    Album: 
    Minutes: 3 
    Seconds: 20 
+0

您在調試時看到了什麼?你能否提供一個[MCVE],以便我們幫你解決問題? –

+1

只需使用std :: string並擺脫所有數組。 –

+1

'return title [MAX_CHAR];' - 解釋你的想法。 – PaulMcKenzie

回答

1

的問題是在你獲取函數,你實際上返回字符而不是數組。您需要做以下更改:

const char* getTitle() const; 
const char* getArtist() const; 
const char* getAlbum() const; 

const char* Song::getTitle() const { 
    return title; 
} 

const char* Song::getArtist() const { 
    return artist; 
} 

const char* Song::getAlbum() const { 
    return album; 
} 
+0

修正了它!謝謝 – 0x1000001