杭电为什么会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"); }}
展开
展开全部
while(gets(t))这里gets读入的字符串确定只有0-9数字?
如果含非数字字符,n[j]=s[t[i]-'0'][(t[i+1]-'0')%a[t[i]-'0']]可能造成a数组越界,恰好越界处的地址值为0,就可能造成除零错误。
如果含非数字字符,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. 春哥也没那么牛叉吧,最好在程序中加合法性判断
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询