初学 C,遇上了几个简单问题,求解决 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tiRolin
V2EX    问与答

初学 C,遇上了几个简单问题,求解决

  •  
  •   tiRolin 2021-10-18 00:03:00 +08:00 2124 次点击
    这是一个创建于 1453 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用的平台是 devc++

    目标是想要将 0 到 100 分,分成 abcde 五个等级

    #include <stdio.h>

    int main()

    { int grade; printf("请输入你的成绩:"); scanf("%d\n",&grade); if ( grade>=90 ) { printf("你本次测验的成绩为 A"); } else if ( 80<=grade < 90) { printf("你本次测验的成绩为 B"); } else if ( 70<=grade < 80 ){

    printf("你本次的测验的成绩为 C"); 

    } else if (60<=grade < 70){

    printf("你本次测验成绩为 D"); } else if ( grade < 60){ printf("你本次测验的成绩为 E"); } return 0; 

    }

    出现的问题,运行时只要输入低于 80 的分数,结果都只会显示成 B 且输入数字按下回车后需要再输入数字才能出结果

    目标,设计一个让用户猜数字大小并能够让用户知道自己猜了多少次的小游戏

    #include <stdio.h> int main() { int number = 55; int count = 0; double a; do { scanf("%lf\n", &a); count++; if ( a > number ){

     printf("大了"); } else if ( a < number ){ printf("小了"); } } while ( a != number ); printf("总共耗费%d 次猜对", count); return 0; 

    }

    问题,在运行里输入的次数必须是两次才会进行一次判定,且会计入总猜题数

    10 条回复    2021-10-18 17:01:01 +08:00
    Tucao
        1
    Tucao  
       2021-10-18 00:32:08 +08:00
    最好对着一本合适的入门书,先敲敲代码,课后练习也做一做。
    这种程度基本功,后面的问题只会越来越多。如果你打算每次遇到小问题就发帖问的话当我没说。
    wevsty
        2
    wevsty  
       2021-10-18 00:37:53 +08:00
    建议先排版好再问问题。
    问题 1:70<=grade < 80 这里错在哪里自己想想。
    问题 2: 浮点数和整数比较相等永远都是有风险的,为什么,自己想想。
    ayase252
        3
    ayase252  
       2021-10-18 00:42:00 +08:00 via iPhone
    当 grade = 80
    80 <= grade < 90 的结果是什么?
    CEBBCAT
        4
    CEBBCAT  
       2021-10-18 01:01:06 +08:00
    贴代码可以用 Gist 、Pastebin 之类的东西,或者学一下 Markdown 语法,这样才能把代码贴得比较好。

    我记得 C/C++里面应该不能连续比较,就像"80<=grade < 90"这样,刚才 Google 了一下也说是不行。你是从 Python 带过来的知识吗?切换语言的时候最好看一下简单的介绍。

    另外,关于连续的 if else,其实可以做成分开的,然后如果进入 if 里面,就直接 return 就好了,或者让程序干脆走到底。
    Procumbens
        5
    Procumbens  
       2021-10-18 01:27:08 +08:00
    80<= grade < 90 的结果一定是 true
    因为 80<=grade 的判断结果为布尔结果,转化为整数就是 0 或 1,这个值是一定小于 90 的。
    要判断区间的话就是 80 <= grade && grade < 90 。
    windyskr
    6
    windyskr  
       2021-10-18 01:28:37 +08:00 via Android
    这不是谭浩强 C 语言教材的课后习题吗...
    villivateur
        7
    villivateur  
       2021-10-18 09:02:36 +08:00 via Android
    c 语言的语法是非常严谨的,不能随便写,a < b < c 这种写法是不允许的
    Leonard
        8
    Leonard  
       2021-10-18 09:22:05 +08:00
    你这代码贴的也太乱了。
    如#7 所说 C 语音不要多个不等式放在一起写
    salor
        9
    salor  
       2021-10-18 16:49:43 +08:00
    第一个问题,想用一个表达式判断两个运算符的时候要用『且&&』『或||』去判断,分析见#5

    第二个问题,scanf 加了\n,分析 https://stackoverflow.com/questions/19499060/what-is-the-effect-of-trailing-white-space-in-a-scanf-format-string
    salor
        10
    salor  
       2021-10-18 17:01:01 +08:00
    要学会多 printf 打印值找 bug 。编译器的语法提示,断点找 bug 都很有用。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3140 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 10:52 PVG 18:52 LAX 03:52 JFK 06:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86