希望输出‘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’的地方,却输出了‘☺’。



