希望输出‘X’,却变成笑脸符号。显然是变量定义有问题,但我没找出来
程序代码:
#include"stdlib.h" #include"string.h" #include"stdio.h" char jiaoyan(char a[]){ char y;int sum=0; for(int i=0;i<17;i++){ switch (a[i]){ case 0:sum=a[i]*7; case 1:sum+=a[i]*9; case 2:sum+=a[i]*10; case 3:sum+=a[i]*5; case 4:sum+=a[i]*8; case 5:sum=a[i]*4; case 6:sum+=a[i]*2; case 7:sum+=a[i]*1; case 8:sum+=a[i]*6; case 9:sum+=a[i]*3; case 10:sum=a[i]*7; case 11:sum+=a[i]*9; case 12:sum+=a[i]*10; case 13:sum+=a[i]*5; case 14:sum+=a[i]*8; case 15:sum=a[i]*4; case 16:sum+=a[i]*2;break; } } int s; switch(s=sum%11){ case 0:y=1;break; case 1:y=0;break; case 2:y='X';break; case 3:y=9;break; case 4:y=8;break; case 5:y=7;break; case 6:y=6;break; case 7:y=5;break; case 8:y=4;break; case 9:y=3;break; case 10:y=2;break; } printf("\n%c\n",y);//为了揪出这个笑脸,我在这里设置断点,发现字符‘X’真的就到这里实现了华丽变形。大大,能不能告诉我为什么?变量Y我明明就定义为字符了,怎么到这里,,是不是中间哪一段'X'变成了ASCII码,所以后面输出“%c”才会输出笑脸,而这个笑脸的ASCII码就正好等于'X'.请帮忙标出问题的位置。 return y; } int main() { int num; scanf("%d",&num);//设置读入次数 char m[100][18]; for(int i=0;i<num;i++){ scanf("%s",&m[i]); } // {for(int i=0;i<num;i++) printf("%s",m[i]); }//检验数据 存入是否成功 for(int i=0;i<num;i++){ int len=strlen(m[i]); switch(len){ case 15: //转换 for(int j=16;j>6;j--)//中间插入年份的前两位, m[i][j]=m[i][j-2]; m[i][6]='1'; if(m[i][14]=='9')//根据顺序码选择1800年或1900年 m[i][7]='8'; else m[i][7]='9'; m[i][17]=jiaoyan(m[i]);//计算校验码 printf("%s\n",&m[i]); break; case 18:if(m[i][17]==jiaoyan(m[i])); printf("Valid\n"); break;//判断校验码,是就输出Valid,break,否就执行吓一跳语句。 default:printf("Invalid\n");break; } } }
上面这段函数编译没出错。但实际执行的时候有问题。就是明明应该是输出‘X’的地方,却输出了‘☺’。