| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1561 人关注过本帖
标题:希望输出‘X’,却变成笑脸符号。显然是变量定义有问题,但我没找出来
只看楼主 加入收藏
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
结帖率:93.75%
收藏
已结贴  问题点数:16 回复次数:7 
希望输出‘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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
找到了這一行出現問題,那麽問題就在這一行的前面:y爲什麽會變呢?前面有什麽代碼是給y賦值的?笑臉的編碼是多少?哪一行給y賦了這個値?程序爲什麽會落入這個分支中呢?去switch()看看。

授人以渔,不授人以鱼。
2015-10-29 12:05
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
问题太多,捡关键错误说。
数组a是字符型,则数组内存储的数字都是字符,所以case 0、1、2等应改为case '0'、'1'、'2'等,否则函数jiaoyan里的sum恒等于0,经过后面的case,y恒等于1,不可能出现case 2:y='X'的值。printf 字符asc值为1的字符,显示不就是笑脸么。
身份证校验不用这么复杂吧,应该不超过20行代码搞定。
极端不喜欢用switch..case,完全可以用非常轻巧的数组下标选择代替。

[此贴子已经被作者于2015-10-29 12:22编辑过]


能编个毛线衣吗?
2015-10-29 12:19
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:2 
0和'0'可不是一回事

总有那身价贱的人给作业贴回复完整的代码
2015-10-29 12:41
书生牛犊
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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你問爲什麽會出現笑臉,我告訴的是怎麽查出這個“爲什麽”,至於代碼的邏輯對不對,是另一回事,怎麽改才得到對的結果而不是僅僅改到不出現笑臉,自己想。先把程序寫對,然後再說怎麽精簡,那是換一個實現方式和算法的事,現在是如何排查故障的事。

[此贴子已经被作者于2015-10-29 15:40编辑过]


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

φ(゜▽゜*)♪
2015-10-29 15:48
蓝色风暴cl
Rank: 8Rank: 8
来 自:新疆
等 级:蝙蝠侠
威 望:3
帖 子:163
专家分:704
注 册:2015-9-6
收藏
得分:0 
,学习学习。

欢迎大家加好友哦,多找我聊聊吧!
2015-10-29 18:52
快速回复:希望输出‘X’,却变成笑脸符号。显然是变量定义有问题,但我没找出来
数据加载中...
 
   



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

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