遇scanf问题

IMSIB 2010-04-13 10:05:04
scanf("%d%d%d\n",&a,&b,&c)与 scanf(""%d%d%d",&a,&b,&c")在程序运行中出现的情况
前者必须送入四个整数才能得到结果,然后后者只需三个实数即得结果,本人原意图是想求三个整数中最大值,先遇两种情况,不知何解。
代码如下:
#include <stdio.h>
#define Format "%f%f%f\n"//
int main(void)
{
float Max(float x,float y);
float a,b,c,z;
printf("please input the Numbers\n");
scanf(Format,&a,&b,&c);
z=Max(Max(a,b),c);
printf("Max=%f",z);
return 0;
}
float Max(float x,float y)
{
if(x>y)
{
return x;
}
else
{
return y;
}
}
#include <stdio.h>
#define Format "%f%f%f"//
int main(void)
{
float Max(float x,float y);
float a,b,c,z;
printf("please input the Numbers\n");
scanf(Format,&a,&b,&c);
z=Max(Max(a,b),c);
printf("Max=%f",z);
return 0;
}
float Max(float x,float y)
{
if(x>y)
{
return x;
}
else
{
return y;
}
}
...全文
266 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuccty 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huanmie_09 的回复:]
楼主可以看看这个:
http://topic.csdn.net/u/20100413/11/2af634c7-cf8e-43a5-aa75-259abfd76296.html
正如楼主得出的结论:
scanf("%d%d%d\n",&a,&b,&c);需要输入四个整数才能结束.
假设楼主的输入为: 1 2 3 4;
这时并没有立即存储到变量里,而是先到键盘缓冲区里……
[/Quote]

多谢指教。
accountHLL 2010-04-14
  • 打赏
  • 举报
回复
main()
{
int a,b,c,max;
printf("\n input three numbers:\n");
scanf("%d,%d,%d",&a,&b,&c);
printf("the max number is:%d",(a>b&&a>c)?a:(b>c?b:c);
}
楼主,这是我根据你的要求三个整数比较大小写的,我觉得这样会简单些,供参考,我也是没学几天的新手,一起共勉
另外,如上面所说,scanf不需要转义字符
buptzwp 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huanmie_09 的回复:]

楼主可以看看这个:
http://topic.csdn.net/u/20100413/11/2af634c7-cf8e-43a5-aa75-259abfd76296.html
正如楼主得出的结论:
scanf("%d%d%d\n",&a,&b,&c);需要输入四个整数才能结束.
假设楼主的输入为: 1 2 3 4;
这时并没有立即存储到变量里,而是先到键盘缓冲区……
[/Quote]
这个很清楚。
dongxu1234 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hemingf 的回复:]

楼主的调用“scanf”函数时,读取每个输入遇空格或是回车等就完成一个值的输入,转到下一个值的输入,看样子你输入值后都是按回车键的吧,其实这个也是可以的scanf("%d%d%d\n",&a,&b,&c),当你完成输入三个值,再按两次回车就可以得出结果了……………………因为最后“%d”对应的“&c”输入数字后会吸收一个回车,“\n”本来就是一个回车~~~~~~
[/Quote]
我晕,我还以为是对的,看的仔细巴拉的~
Vmary 2010-04-14
  • 打赏
  • 举报
回复
三目运算就可以了。本人原意图是想求三个整数中最大值,
艾乐飞 2010-04-14
  • 打赏
  • 举报
回复
学习了。
w74839520 2010-04-14
  • 打赏
  • 举报
回复
不用加换行符

结束可以用 tab 空格 回车结束。注 千万不能用空格。
IMSIB 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 w74839520 的回复:]

不用加换行符

结束可以用 tab 空格 回车结束。注 千万不能用空格。
[/Quote]



能说得再明白点吗,不是很理解你的意思。
aleyn 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huanmie_09 的回复:]
楼主可以看看这个:
http://topic.csdn.net/u/20100413/11/2af634c7-cf8e-43a5-aa75-259abfd76296.html
正如楼主得出的结论:
scanf("%d%d%d\n",&a,&b,&c);需要输入四个整数才能结束.
假设楼主的输入为: 1 2 3 4;
这时并没有立即存储到变量里,而是先到键盘缓冲区里……
[/Quote]
学习了
hemingf 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hemingf 的回复:]
楼主的调用“scanf”函数时,读取每个输入遇空格或是回车等就完成一个值的输入,转到下一个值的输入,看样子你输入值后都是按回车键的吧,其实这个也是可以的scanf("%d%d%d\n",&a,&b,&c),当你完成输入三个值,再按两次回车就可以得出结果了……………………因为最后“%d”对应的“&c”输入数字后会吸收一个回车,“\n”本来就是一个回车~~~~~~
[/Quote]

我的解释是错的,大家直接忽略吧~~~~~~~~
hemingf 2010-04-14
  • 打赏
  • 举报
回复
楼主的调用“scanf”函数时,读取每个输入遇空格或是回车等就完成一个值的输入,转到下一个值的输入,看样子你输入值后都是按回车键的吧,其实这个也是可以的scanf("%d%d%d\n",&a,&b,&c),当你完成输入三个值,再按两次回车就可以得出结果了……………………因为最后“%d”对应的“&c”输入数字后会吸收一个回车,“\n”本来就是一个回车~~~~~~
huanmie_09 2010-04-14
  • 打赏
  • 举报
回复
楼主可以看看这个:
http://topic.csdn.net/u/20100413/11/2af634c7-cf8e-43a5-aa75-259abfd76296.html
正如楼主得出的结论:
scanf("%d%d%d\n",&a,&b,&c);需要输入四个整数才能结束.
假设楼主的输入为: 1 2 3 4;
这时并没有立即存储到变量里,而是先到键盘缓冲区里。
然后scanf开始匹配工作。第一个%d忽略前面的空字符,开始匹配数字1, 当它尝试匹配下一个字符(为空格)的时候,发现它不是数字,匹配结束,scanf将空格放回键盘缓冲区.a的值为1.此后,键盘缓冲区里的内容为" 2 3 4".
然后第二个第三个%d分别匹配到2和3,匹配过程同第一个%d.
第三个%d匹配完后,键盘缓冲区里还有" 4".
最后就是\n开始匹配了,注意:\n能匹配任意数量的空字符(包括空格、回车、跳格等).它先匹配键盘缓冲区里的空格,然后尝试着匹配下一个空字符,但发现此时的字符为'4',匹配结束.scanf将'4'放回到键盘缓冲.
scanf完成工作.
键盘缓冲区里还留有一个"4".
楼主可以在这个scanf函数后加一个scanf("%d", &d);来验证.
田暗星 2010-04-14
  • 打赏
  • 举报
回复
不要scanf里面 '\n'
scanf后面再 printf("\n");
netlover2008 2010-04-14
  • 打赏
  • 举报
回复
积分中。。。
cy330206 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 schoolers 的回复:]
引用 1 楼 etoux 的回复:

你当scanf是printf呀,不需要加\n,不然会把最后一个输入当格式字符。

scanf不需要加\n。
里面也不需要加两层“”啊!
[/Quote]

不需要加“”???
白云飘飘飘 2010-04-13
  • 打赏
  • 举报
回复
scanf("%d%d%d\n",&a,&b,&c);当scanf的格式说明字符串中包含格式符之外的字符,必须输入与之匹配的字符,你这里就是'\n',但scanf是格式化输入,它把'\n'当成了分格符,从来不读入的,当前输入其它字符时,因为与'\n'不匹配,读取就结束了
某某9 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 etoux 的回复:]

你当scanf是printf呀,不需要加\n,不然会把最后一个输入当格式字符。
[/Quote]
scanf不需要加\n。
里面也不需要加两层“”啊!
jbz001 2010-04-13
  • 打赏
  • 举报
回复
第一个好像是以回车结束吧?
eTouX 2010-04-13
  • 打赏
  • 举报
回复
你当scanf是printf呀,不需要加\n,不然会把最后一个输入当格式字符。

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧