杭电为什么会Runtime Error (INTEGER_DIVIDE_BY_ZERO)

#include<stdio.h>#include<string.h>intmain(){char*s[]={"+","_","CAB","FDE","IGH","LJK... #include<stdio.h>#include<string.h>int main(){ char *s[]={ "+", "_", "CAB", "FDE", "IGH", "LJK", "OMN", "SPQR", "VTU", "ZWXY", }; char trans[2][27]={ "QWERTYUIOPASDFGHJKLZXCVBNM", "ABCDEFGHIJKLMNOPQRSTUVWXYZ" }; int a[10]={1,1,3,3,3,3,3,4,3,4}; int i,j,c,p,m; char t[550]={}; char n[550]={}; while(gets(t)) { if(strlen(t)==0) continue; for(i=0,j=0;i<strlen(t)-1;i=i+2,j++) //读取字符串 { n[j]=s[t[i]-'0'][(t[i+1]-'0')%a[t[i]-'0']]; } for(i=0;i<strlen(n);i++) //转换字符 { for(j=0;j<27;j++) if(n[i]==trans[0][j]) { n[i]=trans[1][j]; break; } } if(strlen(n)%2==0) //判断字母个数奇偶 {p=strlen(n)/2-1; m=0;} else {p=(strlen(n)+1)/2-1; m=1;} if(m==1) for(i=p,j=strlen(n)-1,c=0;i>=0;i--,j--,c=c+2) //拼接 { t[c]=n[i]; t[c+1]=n[j]; } else if(m==0) for(i=p,j=strlen(n)-1,c=0;i>=0;i--,j--,c=c+2) { t[c]=n[j]; t[c+1]=n[i]; } for(i=0;i<strlen(n);i++) //输出 { printf("%c",t[i]); } printf("\n"); }} 展开
 我来答
哥德堡快递
2016-07-10 · TA获得超过1582个赞
知道小有建树答主
回答量:1039
采纳率:68%
帮助的人:384万
展开全部
while(gets(t))这里gets读入的字符串确定只有0-9数字?
如果含非数字字符,n[j]=s[t[i]-'0'][(t[i+1]-'0')%a[t[i]-'0']]可能造成a数组越界,恰好越界处的地址值为0,就可能造成除零错误。
追问
他不是说确保输入合法吗
追答
INTEGER_DIVIDE_BY_ZERO是除零错误吧?整个程序代码只有那个取余需要除法运算,所以错误在这里,错误原因只可能是数组越界。

I ensure all input are legal. 春哥也没那么牛叉吧,最好在程序中加合法性判断
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式