标题:选择性结构
只看楼主
编程吗
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2018-3-13
结帖率:33.33%
已结贴  问题点数:5 回复次数:7 
选择性结构
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    int score;
    scanf("%d",&score);
    printf("your score is ");   
    switch(score){
        case'90':printf("优秀");break;
        case'80':printf("良好");break;
        case'70':printf("一般");break;
        case'60':printf("加油");break;
        default:printf("你的输入有错");
    }
     return 0;
}
这个代码为什么定义为char就行,定义为int就不行
搜索更多相关主题的帖子: int score printf case break 
2018-04-06 14:54
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:2 
回复 楼主 编程吗
定义int怎么不行,57分就是成绩优秀了,我记得某编译器'90'=0x00000039,而某编译器'90'=0x00003930,(知道是0x3930而不是0x3039了)不知道有没有记错,总之前者57分为优秀~

[此贴子已经被作者于2018-4-6 20:03编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-06 16:05
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
得分:2 
定义 int型的话,把''去掉
2018-04-06 19:11
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
得分:0 
你这里case '90' :相当于 case 14640 :
2018-04-06 19:18
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
以下是引用李晨经纪人在2018-4-6 19:18:13的发言:

你这里case '90' :相当于 case 14640 :


我这边的编译器是57,看来这个真的和编译器行为有关(难道是"未定义行为"么),当然这是个题外话,注意下就好了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-06 19:55
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
得分:0 
以下是引用九转星河在2018-4-6 19:55:21的发言:



我这边的编译器是57,看来这个真的和编译器行为有关(难道是"未定义行为"么),当然这是个题外话,注意下就好了~

你putchar('90')是9?
那应该是各个编译器有所不同,我以前以为都是0x00003930
2018-04-06 20:59
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 6楼 李晨经纪人
是的,不同编译器的编译环境不同结果也会不一样~
其实键盘输入数据有时不是单独一个ASCII码而是一组"扫描码",可以理解为几个ASCII的组合(例如上下左右4个方向键)~
还有在getch函数是一个值得注意的函数,同时它也是非标准库的C函数(它是从控制台而非缓冲区获取信息的),在windows下读取回车会带有两个字符'\r'和'\n',返回值会直接返回'\r'也就是ASCII码的13,但在linux环境下只是返回一个'\n'也就是10,所以从某方面来说getch的可移植性不怎么样,尽量避免则避免或者用其它方式代替该实现功能~

下面给出一个简单对键盘输入信息处理的程序(参考了xzlxzlxzl版主的某个帖子)当然这个只是适用于电脑端的简单输入(当然包括普通汉字),但对一些特殊符号的处理或者会存在问题的(我用手机端测试输入的特殊符号就有3个组合码,对于下面的程序来说就有些问题了),所以说真有必要去使用getch的时候要十分注意~

程序代码:
#include<stdio.h>
#include<limits.h>
#include<conio.h>

int getKey( void );

int main( void )
{
    do
    {  
        const int n=getKey();
        
        if (n=='\r'||n=='\n')
            break;
        
        printf("%#.4x\n",n);
    }while (1);
    
    puts("");
    
    return 0;
}

int getKey( void )
{
    int n=getch();
    
    if ((n>>~-CHAR_BIT)||(!n))
        return ((n<<CHAR_BIT)|getch());

 
    return n;
}


[此贴子已经被作者于2018-4-7 01:59编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-07 01:29
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
得分:2 
忽略警告可不是好习惯
2018-04-07 07:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485794-1-1.html




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

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