鱼C论坛

 找回密码
 立即注册
查看: 3610|回复: 20

[已解决]C语言lesson 11 if语句的课堂代码小问题

[复制链接]
发表于 2021-9-3 18:54:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面我的代码除了把分数i定义为float类型,而课堂代码为int i,其他的没什么不同,为什么我的代码无论输什么分数,最后打印结果都是E呢?

#include <stdio.h>

int main()
{
        float i;
        
        printf("学生的分数是:");
        scanf("%.1f", &i);
        
        if(i>=90)
        {
                printf("A\n");
        }
        
        else if(80<=i&&i<90)
        {
                printf("B\n");
        }
        
        else if(70<=i&&i<80)
        {
                printf("C\n");
        }
        
        else if(60<=i&&i<70)
        {
                printf("D\n");
        }
        
        else
        {
                printf("E\n");
        }
        
        return 0;
}
最佳答案
2021-9-3 19:33:14
这两行一样吗?一定要仔细看,答案是不一样
        //scanf("%.1f", &i);
        //scanf("%.lf", &i);
#include <stdio.h>

int main()
{
        float i;
        
        printf("学生的分数是:");
        //scanf("%.1f", &i);
        //scanf("%.lf", &i);
        scanf("%f", &i);
        
        if(i>=90)
        {
                printf("A\n");
        }
        
        else if(80<=i&&i<90)
        {
                printf("B\n");
        }
        
        else if(70<=i&&i<80)
        {
                printf("C\n");
        }
        
        else if(60<=i&&i<70)
        {
                printf("D\n");
        }
        
        else
        {
                printf("E\n");
        }
        
        return 0;
}
1630666452(1).jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-3 19:33:14 | 显示全部楼层    本楼为最佳答案   
这两行一样吗?一定要仔细看,答案是不一样
        //scanf("%.1f", &i);
        //scanf("%.lf", &i);
#include <stdio.h>

int main()
{
        float i;
        
        printf("学生的分数是:");
        //scanf("%.1f", &i);
        //scanf("%.lf", &i);
        scanf("%f", &i);
        
        if(i>=90)
        {
                printf("A\n");
        }
        
        else if(80<=i&&i<90)
        {
                printf("B\n");
        }
        
        else if(70<=i&&i<80)
        {
                printf("C\n");
        }
        
        else if(60<=i&&i<70)
        {
                printf("D\n");
        }
        
        else
        {
                printf("E\n");
        }
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 19:34:47 | 显示全部楼层
这种错误以后不要犯了
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 21:25:25 | 显示全部楼层
人造人 发表于 2021-9-3 19:33
这两行一样吗?一定要仔细看,答案是不一样

感谢,错的就是%.1f,只需要改为%f即可。
没想到错在这,背后原因是什么呢,为什么scanf函数不能写成"%.2f“?

另外,昨晚见到一篇推文,明白了兄台这昵称的内涵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 21:32:06 | 显示全部楼层
张sir. 发表于 2021-9-3 21:25
感谢,错的就是%.1f,只需要改为%f即可。
没想到错在这,背后原因是什么呢,为什么scanf函数不能写成"%. ...

注意你写的是数字 1,不是字母 l,还是没看出来?
要认真一点呀,要达到在字母级别的认真
至于
scanf("%.lf", &i);
我没见过这么用 scanf 的

还有,我想你误会我的 id 了
“人造人” 这个名字不是你想的那样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 21:34:09 | 显示全部楼层
人造人 发表于 2021-9-3 19:34
这种错误以后不要犯了

这个问题我没犯啊,我的代码中是1不是l
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 21:35:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 21:40:01 | 显示全部楼层
看这个吧,这个更好一些
http://www.cplusplus.com/reference/cstdio/scanf/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 21:43:57 | 显示全部楼层
张sir. 发表于 2021-9-3 21:34
这个问题我没犯啊,我的代码中是1不是l

说你不认真是有原因的,看你的代码第 8 行
你写的是数字 1,正确的这里是字母 l
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 21:47:56 | 显示全部楼层
试一下这两个代码,哪一个正确
#include <stdio.h>

int main(void) {
    double n;
    scanf("%lf", &n);
    printf("%lf\n", n);
    return 0;
}
#include <stdio.h>

int main(void) {
    double n;
    scanf("%1f", &n);
    printf("%1f\n", n);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 21:57:13 | 显示全部楼层
人造人 发表于 2021-9-3 21:43
说你不认真是有原因的,看你的代码第 8 行
你写的是数字 1,正确的这里是字母 l

那个,现在明白了scanf不能像printf那样print("%.1f"),在[%]这个字符后面就是加一点和一个数字,1的话就是1个小数位——所以我写数字1没问题,只是scanf函数不能用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 22:01:29 | 显示全部楼层
张sir. 发表于 2021-9-3 21:57
那个,现在明白了scanf不能像printf那样print("%.1f"),在[%]这个字符后面就是加一点和一个数字,1的话就 ...

你这么一说,我明白你的意思了
之前是我没有明白你的意思,抱歉了
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 22:03:48 | 显示全部楼层
张sir. 发表于 2021-9-3 21:57
那个,现在明白了scanf不能像printf那样print("%.1f"),在[%]这个字符后面就是加一点和一个数字,1的话就 ...

对,scanf 不能这样用
scanf 的格式和 printf 的是不一样的
scanf 是这样
%
  • [width][length]specifier
  • printf 是这样
    %[flags][width][.precision][length]specifier
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2021-9-3 22:04:32 | 显示全部楼层
    人造人 发表于 2021-9-3 21:47
    试一下这两个代码,哪一个正确

    第1个正确。
    所以其实不是我粗心的原因,我那个.1是仿照printf来的,没想到在scanf里不行。

    至于1、%1f是什么 2、和%f区别以及 3、为什么scanf里可以%1f而不能%.1f,需要我明天仔细看看老兄你发的scanf函数扩展内容,看能不能有收获。
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2021-9-3 22:05:46 | 显示全部楼层
    张sir. 发表于 2021-9-3 22:04
    第1个正确。
    所以其实不是我粗心的原因,我那个.1是仿照printf来的,没想到在scanf里不行。

    抱歉了,是我没有理解你的意思
    ^_^
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2021-9-3 22:11:26 | 显示全部楼层
    人造人 发表于 2021-9-3 22:03
    对,scanf 不能这样用
    scanf 的格式和 printf 的是不一样的
    scanf 是这样

    谢谢老兄,很细心耐心指导。

    我目前是才开始学编程,C语言学到第11课if语句,关于printf和scanf,我目前还是依样画葫芦的阶段,经过每节课的手撸代码,现在能用,正因为对甲鱼论坛中函数快查的printf和scanf函数内容仔细看了一遍,才在“用”的层面进步了,但对诸如对%
  • [width][length]specifier这个内容,我不太理解。比如printf里的%.2f,我知道.2指的是width宽度,有2个小数位,f指的是浮点型数据是length长度吗?那specifier指啥呢?
  • 想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2021-9-3 22:13:31 | 显示全部楼层
    张sir. 发表于 2021-9-3 22:04
    第1个正确。
    所以其实不是我粗心的原因,我那个.1是仿照printf来的,没想到在scanf里不行。

    对于 scanf
    %
  • [width][length]specifier
  • %1f 中
    没有 *
    1 对应 width
    没有 length
    f 对应 specifier

    对于 printf
    %[flags][width][.precision][length]specifier
    %1f 中
    没有 flags
    1 对应 width
    没有 .precision
    没有 length
    f 对应 specifier

    对于 printf
    %[flags][width][.precision][length]specifier
    %.1f 中
    没有 flags
    没有 width
    .1 对应 .precision
    没有 length
    f 对应 specifier

    在 scanf 中,没有 .precision,没有 . 开头的字段,对应不上
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 1 反对 0

    使用道具 举报

    发表于 2021-9-3 22:17:27 | 显示全部楼层
    张sir. 发表于 2021-9-3 22:11
    谢谢老兄,很细心耐心指导。

    我目前是才开始学编程,C语言学到第11课if语句,关于printf和scanf,我目 ...

    "[width][length]specifier这个内容,我不太理解。比如printf里的%.2f,我知道.2指的是width宽度"
    你看的这个不对
    .2 指的是 .precision
    width 没有提供
    %10.5f
    10 -> width
    .5 -> .precision
    f -> specifier
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2021-9-3 22:20:41 | 显示全部楼层
    length 是这些
    1.png
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2021-9-3 22:29:47 | 显示全部楼层

    非常感谢老兄,收获非常大,一把试一把尿咳咳~~手把手地教了这是,明天我把相关资料再仔细过一遍,相信能加深理解。这种小问题,积累多了真的是时不时挖出个新坑。

    今晚好梦
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

    GMT+8, 2025-1-4 15:11

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表