首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的打印函数输出垃圾,并且我当前的函数不能正常工作?

为什么我的打印函数输出垃圾,并且我当前的函数不能正常工作?
EN

Stack Overflow用户
提问于 2012-02-13 14:56:55
回答 1查看 406关注 0票数 0

这里是头文件http://pastebin.com/g0z7LkeN这里是实现文件http://pastebin.com/USHbjbYC

下面是测试调试器文件(不应该更改它)

代码语言:javascript
复制
// 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来打印出整个序列时,它永远不会正常工作,并且经常输出垃圾,当我在输入或附加2个数字后在调试器菜单中单击c时,它似乎也不能正常工作。我分析了我的算法,我不明白为什么它们不能正常工作。

EN

回答 1

Stack Overflow用户

发布于 2012-02-13 15:38:29

摘要:

您需要做的是使用另一个构造函数创建测试实例,即接受大小参数的构造函数。

原始文本

通过查看上面的“测试调试器文件”,我注意到您调用了类序列的默认构造函数:

代码语言:javascript
复制
sequence test; // A sequence that we’ll perform tests on

查看实现,我找不到已经实现了它的。我认为构造函数:

代码语言:javascript
复制
sequence(size_type entry=CAPACITY )

是您需要调用的,以便在启动时“新建”底层数组数据并正确设置索引。例如,在调用show_sequence(测试)时,当前代码将从未初始化的随机存储器读取数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9256626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档