V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tiRolin
V2EX  ›  问与答

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

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

    使用的平台是 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   ·   实用小工具   ·   1004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 21:36 · PVG 05:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.