求助,大家看看这个程序有啥问题
//编写一个程序,输入月份号,输出该月的英文月名,例如,输入“3”,则输出“March”,要求用指针数组处理。英文单词分别是:January、February、March、April、May、June、July、August、September、October、November、December
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n,i,t,j;
char *name[12]={"January","February", "March","April","May","June","July","August","September","October","November","December"};
cin>>t;
int *a=new int[t];
for(i=0;i<t;i++)
{
cin>>a[i];
}
for(j=0;j<t;j++)
{
cout<<name[a[j]-1]<<endl;
}
return 0;
}
输入
第一行输入测试样本数;
以下每一行输入一个数字。
输出
每一行输出相应的英文
样例输入
2
3
5
样例输出
March
May
编译没问题,运行没问题,测试没问题,但某个测试系统,放上去就是通不过
Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域
求助大家看看这个程序是哪里出了问题?
[解决办法]
这种OJ的题目,一般输入都是正确的值,比如这里,就只会有1到12的输入,而不会有13这种错误的输入,除非题目有提示说输入可能有错,才需要错误处理,重点是:向来不是把数据全部读完再处理,而是边读,边处理。
第一行输入测试样本数;如果这个数很大,你就分配不了内存了。
所以,一般的思路是
const string months[] = { "Jan", "Feb", "", ... };
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int tmp;
cin >> tmp;
cout << months[tmp - 1] << endl;
}