首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,大家看看这个程序有啥有关问题

2013-06-25 
求助,大家看看这个程序有啥问题//编写一个程序,输入月份号,输出该月的英文月名,例如,输入“3”,则输出“March

求助,大家看看这个程序有啥问题

//编写一个程序,输入月份号,输出该月的英文月名,例如,输入“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;
}

热点排行