C++数组输出异常:输入完成后程序无输出直接终止
问题分析与解决
核心问题
你创建了obj2对象来接收用户输入的数组数据,但最终调用打印函数print_lista()的是obj3——一个通过默认构造函数生成的空对象。obj3的k变量未初始化,numbers数组也没有任何有效数据,所以程序不会输出内容。
另外,默认构造函数没有初始化k值,未初始化的整型变量值是不确定的,可能引发不可预料的行为。
修复方案
直接使用存储了输入数据的obj2调用打印函数即可,无需创建空对象obj3。
修正后的main函数代码:
int main() { cout << "Enter how many numbers you want to enter" << endl; clist obj; cin >> obj.i; clist obj2(obj.i); // 直接用存储了数据的obj2调用打印函数 obj2.print_lista(); return 0; }
额外优化建议
- 把类的成员变量设置为私有(
private),通过公共接口访问,符合封装原则。 - 在默认构造函数中初始化
k为0,避免未初始化的变量问题。 - 避免使用类的成员变量作为循环计数器(比如
times),推荐在函数内部声明局部变量,防止成员变量被意外修改。
优化后的完整示例代码:
#include <iostream> using namespace std; class clist { private: int k; double numbers[1000]; public: clist () : k(0) {} clist(int count) : k(count) { cout << "Enter the numbers" << endl; for (int times = 0; times < k; times++) { cin >> numbers[times]; } } void print_lista() { for (int times = 0; times < k; times++) { cout << numbers[times] << "\t" << endl; } } }; int main() { cout << "Enter how many numbers you want to enter" << endl; int count; cin >> count; clist obj(count); obj.print_lista(); return 0; }
内容的提问来源于stack exchange,提问作者chami
相关产品推荐
相关产品推荐

