2012-02-13 23 views
0

繼承人的頭文件http://pastebin.com/g0z7LkeN 繼承人的實現文件http://pastebin.com/USHbjbYC爲什麼我的打印功能吐出垃圾和我目前的功能無法正常工作?

,這裏是測試調試程序文件(不應該改變它)

// FILE: sequence_test.cpp 
// An interactive test program for the new sequence class 
#include <cctype>  // Provides toupper 
#include <iostream>  // Provides cout and cin 
#include <cstdlib>  // Provides EXIT_SUCCESS 
#include "sequence2.h" // With value_type defined as double 
using namespace std; 
using namespace CISP430_A2; 

// PROTOTYPES for functions used by this test program: 
void print_menu(); 
// Postcondition: A menu of choices for this program has been written to cout. 

char get_user_command(); 
// Postcondition: The user has been prompted to enter a one character command. 
// The next character has been read (skipping blanks and newline characters), 
// and this character has been returned. 

void show_sequence(sequence display); 
// Postcondition: The items on display have been printed to cout (one per line). 

double get_number(); 
// Postcondition: The user has been prompted to enter a real number. The 
// number has been read, echoed to the screen, and returned by the function. 


int main() 
{ 
    sequence test; // A sequence that we’ll perform tests on 
    char choice; // A command character entered by the user 

    cout << "I have initialized an empty sequence of real numbers." << endl; 

    do 
    { 
     print_menu(); 
     choice = toupper(get_user_command()); 
     switch (choice) 
     { 
      case '!': test.start(); 
         break; 
      case '+': test.advance(); 
         break; 
      case '?': if (test.is_item()) 
          cout << "There is an item." << endl; 
         else 
          cout << "There is no current item." << endl; 
         break; 
      case 'C': if (test.is_item()) 
          cout << "Current item is: " << test.current() << endl; 
         else 
          cout << "There is no current item." << endl; 
         break; 
      case 'P': show_sequence(test); 
         break; 
      case 'S': cout << "Size is " << test.size() << '.' << endl; 
         break; 
      case 'I': test.insert(get_number()); 
         break; 
      case 'A': test.attach(get_number()); 
         break; 
      case 'R': test.remove_current(); 
         cout << "The current item has been removed." << endl; 
         break;  
      case 'Q': cout << "Ridicule is the best test of truth." << endl; 
         break; 
      default: cout << choice << " is invalid." << endl; 
     } 
    } 
    while ((choice != 'Q')); 

    return EXIT_SUCCESS; 
} 

void print_menu() 
// Library facilities used: iostream.h 
{ 
    cout << endl; // Print blank line before the menu 
    cout << "The following choices are available: " << endl; 
    cout << " ! Activate the start() function" << endl; 
    cout << " + Activate the advance() function" << endl; 
    cout << " ? Print the result from the is_item() function" << endl; 
    cout << " C Print the result from the current() function" << endl; 
    cout << " P Print a copy of the entire sequence" << endl; 
    cout << " S Print the result from the size() function" << endl; 
    cout << " I Insert a new number with the insert(...) function" << endl; 
    cout << " A Attach a new number with the attach(...) function" << endl; 
    cout << " R Activate the remove_current() function" << endl; 
    cout << " Q Quit this test program" << endl; 
} 

char get_user_command() 
// Library facilities used: iostream 
{ 
    char command; 

    cout << "Enter choice: "; 
    cin >> command; // Input of characters skips blanks and newline character 

    return command; 
} 

void show_sequence(sequence display) 
// Library facilities used: iostream 
{ 
    for (display.start(); display.is_item(); display.advance()) 
     cout << display.current() << endl; 
} 

double get_number() 
// Library facilities used: iostream 
{ 
    double result; 

    cout << "Please enter a real number for the sequence: "; 
    cin >> result; 
    cout << result << " has been read." << endl; 
    return result; 
} 

當我點擊選項P在debuger打印整個序列它永遠不會正常工作,並經常吐出垃圾,當我在調試器菜單中點擊c後,或在附加2個數字後,它似乎無法正常工作。我analized我的算法,我不明白爲什麼他們arent工作的權利..

+0

你到目前爲止嘗試過什麼?你認爲問題在哪裏?調試器指出哪些具體問題? – templatetypedef 2012-02-13 06:58:29

+0

我試圖在插入函數的數據下標中加1,並嘗試減1,但那些沒有奏效,我不知道問題出在哪裏,實際上當我點擊附件後當前工作正常,但是當我點擊開始或提前時無論做什麼或打印出垃圾,打印功能都會在每次點擊時打印出垃圾。 – user1080889 2012-02-13 07:08:19

+0

您是否曾嘗試在調試器中運行它,逐步完成相關功能並檢查變量? – 2012-02-13 07:12:24

回答

0

摘要:

您使用的是默認的構造函數不分配您存儲陣列創建類序列的一個實例數字,當從菜單中調用任何函數時,這將導致不正確的行爲,因爲它們依賴於要正確初始化的數組。你需要做的是使用另一個構造函數創建測試實例,即採用大小參數的構造函數。

原始文本

從尋找「測試調試文件」上面我注意到你呼籲級序列中的默認構造函數:

sequence test; // A sequence that we’ll perform tests on 

望着實現,我不能發現已經實現了它。我認爲,構造函數:

sequence(size_type entry=CAPACITY) 

是你需要,以「新」爲基礎數組數據調用,並在啓動時設置正確的指標是什麼。當前的代碼將例如在調用show_sequence(test)從未初始化的隨機存儲器讀取數據時。

+0

你可以請你換回你的答案kristofer它很難理解 – user1080889 2012-02-13 08:07:44

+0

更好嗎? – Kristofer 2012-02-13 09:39:09

相關問題