我正在尝试制作一个程序,让用户通过添加 *、/等字符来输入“形状”,然后根据用户输入的次数将其打印在屏幕上。该程序运行良好,但最后它说程序没有响应。有什么帮助吗?
#include <iostream>
using namespace std;
int main()
{
int a,h=1 ,b=0, x=7;
char test[a][100];
cout<<"Input how many lines ";
cin>>a;
cout<<"Input how many repeats ";
cin>>b;
for(int j=1; j<=a; j++)
{
cin>>test[j];
}
while(h<=b)
{
for(int c=1; c<=a; c++)
{
cout<<test[c]<<"\n";
}
h++;
}
return 0;
}
最佳答案
您的代码在此处调用未定义行为 (UB):
int a, ...;
char test[a][100];
您正在尝试使用未初始化 变量 (a
) 声明一个固定大小的二维数组。
此外,即使是,可变大小数组也不是标准 C++。
如果启用警告标志(例如 GCC 中的 Wall
),您应该得到:
prog.cc:7:21: warning: 'a' is used uninitialized in this function [-Wuninitialized]
char test[a][100];
^
此外,数组索引从 0 开始,到 N - 1 结束,其中 N 是数组的大小。所以你需要改变这个:
for(int j=1; j<=a; j++)
为此:
for(int j=0; j<a; j++)
为了正确访问数组,而不是像 j
获取 a
的值时发生的越界。越界访问数组也会导致未定义的行为。
关于c++ - 示例程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51357711/