代码改变世界

重学C语言 基本的格式化输入输出

2011-05-10 06:43  iLoae  阅读(504)  评论(1编辑  收藏  举报

原文出处:http://www.demosir.com/basic-fio-method.html

明天要骑自行车上班,大约30公里的样子,一天来回60公里,一周5天300公里,一个月大概20天1200公里,计划骑6个月到11月份,7200公里。这个距离是从北京到拉萨的一个来回。到时候不知道车子和我会变成神马模样。生命不息,折腾不止!还有就是车子别再丢了,诅咒所有偷车子的人,生男孩浑身长满长短不齐的小JJ,生女孩浑身长满大小不等的MM。

基本的格式化输入输出

scanf和printf,在第一次学C语言的时候,这两个函数是最让我激动的,因为终于可以让自己写的程序与人交互了。

  • printf函数是必须要服从于格式串的输出。
int i =5;
float x=3.14;
/*很多页代码之后,人晕手滑,键盘乱抖打出如下代码*/
printf("%f,%d",i,x);

这样的代码是合法的,但是却在输出的时候,将整形与浮点型变量的顺序弄错了,那最终打印出来的结果也就是没有意义的。

  • 如何避免这种错误呢?

个人的解决方法是把变量改名为有实际意义的名称,比如上面的i可以改成student_count,x可以改为pi,这样在写出对应的printf之后,哪怕不知道声明是什么样子的,一般情况下也不会搞错,这就是编程规范起到的作用。

scanf是根据用户特定的输入格式读取输入,简单却危险,这个函数本质上一个模式匹配函数(就像告诉计算机:去吃掉两个杯子之间的苹果,如果有人在两个杯子之间放了条虫子,计算机依然会遵从输入的吃苹果模式,把那个虫子吃进去),所以在很多场合下,这种不太负责任的输入方式是不允许的。

接着一个经典小例子,求两个分数的和:

#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版)