C语言lesson 11 if语句的课堂代码小问题
下面我的代码除了把分数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;
} 这两行一样吗?一定要仔细看,答案是不一样
//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;
}
这种错误以后不要犯了
人造人 发表于 2021-9-3 19:33
这两行一样吗?一定要仔细看,答案是不一样
感谢,错的就是%.1f,只需要改为%f即可。
没想到错在这,背后原因是什么呢,为什么scanf函数不能写成"%.2f“?
另外,昨晚见到一篇推文,明白了兄台这昵称的内涵{:10_256:}{:10_256:} 张sir. 发表于 2021-9-3 21:25
感谢,错的就是%.1f,只需要改为%f即可。
没想到错在这,背后原因是什么呢,为什么scanf函数不能写成"%. ...
注意你写的是数字 1,不是字母 l,还是没看出来?
要认真一点呀,要达到在字母级别的认真
至于
scanf("%.lf", &i);
我没见过这么用 scanf 的
还有,我想你误会我的 id 了
“人造人” 这个名字不是你想的那样
人造人 发表于 2021-9-3 19:34
这种错误以后不要犯了
这个问题我没犯啊,我的代码中是1不是l{:10_254:} https://www.runoob.com/cprogramming/c-function-scanf.html 看这个吧,这个更好一些
http://www.cplusplus.com/reference/cstdio/scanf/ 张sir. 发表于 2021-9-3 21:34
这个问题我没犯啊,我的代码中是1不是l
说你不认真是有原因的,看你的代码第 8 行
你写的是数字 1,正确的这里是字母 l
试一下这两个代码,哪一个正确
#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;
}
人造人 发表于 2021-9-3 21:43
说你不认真是有原因的,看你的代码第 8 行
你写的是数字 1,正确的这里是字母 l
那个,现在明白了scanf不能像printf那样print("%.1f"),在[%]这个字符后面就是加一点和一个数字,1的话就是1个小数位——所以我写数字1没问题,只是scanf函数不能用。 张sir. 发表于 2021-9-3 21:57
那个,现在明白了scanf不能像printf那样print("%.1f"),在[%]这个字符后面就是加一点和一个数字,1的话就 ...
你这么一说,我明白你的意思了
之前是我没有明白你的意思,抱歉了
^_^ 张sir. 发表于 2021-9-3 21:57
那个,现在明白了scanf不能像printf那样print("%.1f"),在[%]这个字符后面就是加一点和一个数字,1的话就 ...
对,scanf 不能这样用
scanf 的格式和 printf 的是不一样的
scanf 是这样
%[*]specifier
printf 是这样
%[.precision]specifier 人造人 发表于 2021-9-3 21:47
试一下这两个代码,哪一个正确
第1个正确。
所以其实不是我粗心的原因,我那个.1是仿照printf来的,没想到在scanf里不行。
至于1、%1f是什么 2、和%f区别以及 3、为什么scanf里可以%1f而不能%.1f,需要我明天仔细看看老兄你发的scanf函数扩展内容,看能不能有收获。 张sir. 发表于 2021-9-3 22:04
第1个正确。
所以其实不是我粗心的原因,我那个.1是仿照printf来的,没想到在scanf里不行。
抱歉了,是我没有理解你的意思
^_^ 人造人 发表于 2021-9-3 22:03
对,scanf 不能这样用
scanf 的格式和 printf 的是不一样的
scanf 是这样
谢谢老兄,很细心耐心指导。
我目前是才开始学编程,C语言学到第11课if语句,关于printf和scanf,我目前还是依样画葫芦的阶段,经过每节课的手撸代码,现在能用,正因为对甲鱼论坛中函数快查的printf和scanf函数内容仔细看了一遍,才在“用”的层面进步了,但对诸如对%[*]specifier这个内容,我不太理解。比如printf里的%.2f,我知道.2指的是width宽度,有2个小数位,f指的是浮点型数据是length长度吗?那specifier指啥呢? 张sir. 发表于 2021-9-3 22:04
第1个正确。
所以其实不是我粗心的原因,我那个.1是仿照printf来的,没想到在scanf里不行。
对于 scanf
%[*]specifier
%1f 中
没有 *
1 对应 width
没有 length
f 对应 specifier
对于 printf
%[.precision]specifier
%1f 中
没有 flags
1 对应 width
没有 .precision
没有 length
f 对应 specifier
对于 printf
%[.precision]specifier
%.1f 中
没有 flags
没有 width
.1 对应 .precision
没有 length
f 对应 specifier
在 scanf 中,没有 .precision,没有 . 开头的字段,对应不上
张sir. 发表于 2021-9-3 22:11
谢谢老兄,很细心耐心指导。
我目前是才开始学编程,C语言学到第11课if语句,关于printf和scanf,我目 ...
"specifier这个内容,我不太理解。比如printf里的%.2f,我知道.2指的是width宽度"
你看的这个不对
.2 指的是 .precision
width 没有提供
%10.5f
10 -> width
.5 -> .precision
f -> specifier length 是这些
人造人 发表于 2021-9-3 22:20
length 是这些
非常感谢老兄,收获非常大,一把试一把尿咳咳~~手把手地教了这是,明天我把相关资料再仔细过一遍,相信能加深理解。这种小问题,积累多了真的是时不时挖出个新坑。
今晚好梦{:10_279:}
页:
[1]
2