为什么我的打印函数会吐垃圾,而我当前的函数却不能正常工作
Why is my print function spitting out garbage and my current function not working properly?
这是头文件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打印出整个序列时,它永远不会正常工作,而且经常吐出垃圾。当我在插入或附加2个数字后单击调试器菜单中的c时,它似乎也不正常工作。我分析了我的算法,但我不明白为什么它们不能正常工作。。
摘要:
您正在使用默认构造函数创建类序列的实例,该构造函数不分配存储数字的数组,这将在从菜单调用任何函数时导致不正确的行为,因为它们依赖于要正确初始化的数组。您需要做的是使用另一个构造函数创建测试实例,即使用size参数的构造函数。
原始文本
从上面的"测试调试器文件"中,我注意到您调用了类序列的默认构造函数:
sequence test; // A sequence that we’ll perform tests on
看看实现,我找不到已经实现了它。我认为构造函数:
sequence(size_type entry=CAPACITY )
是您需要调用的,以便在启动时"新建"底层数组数据并正确设置索引。例如,当前代码将在调用show_sequence(test)时从未初始化的随机内存中读取数据。
相关文章:
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么虚函数不能是静态的和全局的?
- 为什么继承的受保护构造函数不能公开?
- C++为什么类成员函数不能重新声明,但普通函数可以
- 为什么在C++中使用关系运算符创建的模板函数不能对字符串正常工作?
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 为什么模板函数不能作为模板模板参数传递?
- 为什么 free 函数不能在 C 数组上运行,而 std::begin 在某些情况下可以在 C++14 中运行?
- 构造函数不能用于启发性化
- C 错误 - 函数不能超载
- 有没有办法使成员函数不能从构造函数调用
- 为什么模板函数不能是模板类的友元模板函数
- "Framework::Graphics::Material"的默认构造函数不能被引用 - 它是一个已删除的函数
- lower_bound()函数不能在调试模式下编译
- 为什么函数不能正确强制转换指针(从基类到派生类)
- 显式默认函数不能声明为 constexpr,因为隐式声明不是 constexpr
- 琐碎的默认构造函数不能是 constexpr?
- 函数不能嵌套,那么如何在C++中执行此操作
- 错误:成员函数不能在其类之外声明
- 错误-仅返回类型不同的函数不能重载.c++