| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1561 人关注过本帖
标题:希望输出‘X’,却变成笑脸符号。显然是变量定义有问题,但我没找出来
取消只看楼主 加入收藏
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
结帖率:93.75%
收藏
已结贴  问题点数:16 回复次数:2 
希望输出‘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’的地方,却输出了‘☺’。
搜索更多相关主题的帖子: color 
2015-10-29 11:17
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 2楼 TonyDeng
后来总算突然醒悟,好多地方错了。第一就是switch的依据不应该是那个数组,而是i
还有就是说到的字符和数值转换的问题,我在这个函数里重新定义了一个int数组,把char-'0',转换成数值,然后在代入计算,用了整整80行才完成。。。距离精简,就太远了

φ(゜▽゜*)♪
2015-10-29 15:33
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 6楼 TonyDeng
刚刚已经写出来了。谢谢。
        刚学编程,最重要的也确实就是要知道为什么,怎么做倒是其次,这个认识我还是有的。

φ(゜▽゜*)♪
2015-10-29 15:48
快速回复:希望输出‘X’,却变成笑脸符号。显然是变量定义有问题,但我没找出来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035361 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved