我正在尝试制作一个程序,其中用户通过添加*,/等字符来输入“形状”,然后在屏幕上打印用户输入的次数。该程序工作正常,但最后它说程序没有响应。有什么帮助吗?
#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;
}
答案 0 :(得分:3)
您的代码在此处调用未定义行为(UB):
int a, ...;
char test[a][100];
您正试图使用未初始化变量(a
)声明固定大小的2D数组。
此外,即使是可变大小数组也不是标准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
的值时出界。超出范围访问数组也会导致未定义行为。