重学C语言 基本的格式化输入输出
2011-05-10 06:43 iLoae 阅读(512) 评论(1) 编辑 收藏 举报原文出处:http://www.demosir.com/basic-fio-method.html
明天要骑自行车上班,大约30公里的样子,一天来回60公里,一周5天300公里,一个月大概20天1200公里,计划骑6个月到11月份,7200公里。这个距离是从北京到拉萨的一个来回。到时候不知道车子和我会变成神马模样。生命不息,折腾不止!还有就是车子别再丢了,诅咒所有偷车子的人,生男孩浑身长满长短不齐的小JJ,生女孩浑身长满大小不等的MM。
基本的格式化输入输出
scanf和printf,在第一次学C语言的时候,这两个函数是最让我激动的,因为终于可以让自己写的程序与人交互了。
- printf函数是必须要服从于格式串的输出。
1 2 3 4 | int i =5; float x=3.14; /*很多页代码之后,人晕手滑,键盘乱抖打出如下代码*/ printf ( "%f,%d" ,i,x); |
这样的代码是合法的,但是却在输出的时候,将整形与浮点型变量的顺序弄错了,那最终打印出来的结果也就是没有意义的。
- 如何避免这种错误呢?
个人的解决方法是把变量改名为有实际意义的名称,比如上面的i可以改成student_count,x可以改为pi,这样在写出对应的printf之后,哪怕不知道声明是什么样子的,一般情况下也不会搞错,这就是编程规范起到的作用。
scanf是根据用户特定的输入格式读取输入,简单却危险,这个函数本质上一个模式匹配函数(就像告诉计算机:去吃掉两个杯子之间的苹果,如果有人在两个杯子之间放了条虫子,计算机依然会遵从输入的吃苹果模式,把那个虫子吃进去),所以在很多场合下,这种不太负责任的输入方式是不允许的。
接着一个经典小例子,求两个分数的和:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main( void ) { int num1,denom1,num2,denom2,result_num,result_denom; printf ( "Enter first fraction: " ); scanf ( "%d/%d" ,&num1,&denom1); printf ( "Enter second fraction: " ); scanf ( "%d/%d" ,&num2,&denom2); result_num = num1*denom2 + num2*denom1; result_denom = denom1*denom2; printf ( "The sum is %d/%d\n" ,result_num,result_denom); return 0; } |
运行的结果是一个没有化简的结果:
2/7
3/4
Enter first fraction: Enter second fraction: The sum is 29/28
从这个例子里面可以体会一下,什么叫做格式化输入输出。
还有很多printf与scanf相关的内容,都在书上,比如%i与%d的区别,如何打印出%,scanf如何处理缓冲区等等。
下载英文原版 请以留言方式留下您的邮箱
中文版购买链接:C语言程序设计:现代方法(第2版)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?