C语言输入输出系列函数讲解:
printf函数用于将数据按一定格式打印到屏幕上,它的第一个参数是一个字符串,用于设置打印的格式,其余参数是要打印的内容。例如:
char girl[] = "Jane";
printf("Hi, %s!", girl); // 该行输出:Hi, Jane!
int a = 1, b = 2;
printf("%d + %d = %d", a, b, a+b); // 改行输出:1 + 2 = 3
你已经看到格式化字符串中有一些以百分号%, 它用于指定要输出数据的格式,每一个%对应一个输出数据,因此需要在printf函数中带有相应的数据做参数。
常用的输出格式有:
%d    十进制整数
%x    十六进制整数
%f    浮点数
%s    字符串
另外可能还要输出一些特殊的字符,例如回车、换行、制表符,他们分别用\r\n\t表示。如果要输出百分号,则需要使用%%

scanf函数用于从键盘获取输入,同printf一样,它的第一个参数表示输入的格式,后面的参数为要输入数据的存放位置(数据的指针)。
int a, b, r;
char c;
char girl[16];
scanf("请输入一个表达式:%d%c%d=", &a, &c, &b); // 这时候你用键盘输入:1+2=并回车,则a的值为1,b的值为2,c的值为'c'。可以看出scanf的参数和printf的不同之处在于它是数据的地址。
scanf("请输入你的名字:%s", girl); // 你输入:Jane并回车,则girl中存储字符串Jane,包括字符串结束符\0。注意,字符串参数的格式是和printf相同的,都是指针。
switch(c)
{
case '+': r = a + b; break;
case '-': r = a - b; break;
case '*': r = a * b; break;
case '/': r = a / b; break;
default: printf("不识别的运算符\n"); break;
}
printf("%d %c %d = %d\n", a, c, b, r);
 
sprinft函数和sscanf函数和上面两个函数类似,只是输入和输出不是屏幕和键盘,而是内存中的字符串。例如:
char str[256];
int a=1, b=2;
sprintf(str, "%d-%d=%d", a, b, a+b); // 则str中存放的字符串为:1-2=3
char *str2 = "0x521";
sscanf(str2, "0x%x", &a); // 则a的值变成0x521
 

总结

 

输入输出函数,是用printf打印格式化字符串到屏幕,是用scanf从键盘读取格式化字符串并转换成特定格式(例如整数)。两个函数的第一个参数都是格式字符串,后面可以跟多个参数,printf的参数需要是数据的值,而scanf的参数则是数据的地址(指针)。不过对于字符串,两个函数都是传递指针。

sprintf将结果输出到一个字符数组中,而sscanf则从字符串中获取输入。

 

作业

 

课后作业,根据上两节讲述的内容,写一个计算器程序,用户输入表达式,计算表达式的结果。

输入:12+23=

输出:35

输入:12 + 23

输出:35

输入:a+b=

输出:错误的表达式

输入:1+2+3=

输出:6

输入:1+2*3=

输出:9

由上面的输入输出可以看出,程序中需要识别数字(都是正整数)和运算符,等号是可选的,空格要过滤掉,不对的表达式要报错,由前到后进行计算,不要求判断运算的优先级。

提示:定义两个缓冲区,一个用于接收用户的输入(char expr[]),以用于保存工作中的临时状态(char temp[])。接收用户的一行表达式输入,从前到后扫描输入中的每一个字符,将数字存储temp中,直到遇到一个运算符或者表达式结束,通过sscanf将temp中的字符串转变成数字,然后继续扫描下一个数字,根据不同的运算符进行不同的计算,将中间结果保存。如果遇到等号或者表达式结束,则计算最后一个运算的值,打印输出。例如针对输入1 + 20*3=,扫描过程为:

char *p = expr; 当前字符为数字,存入temp中,继续下一个字符

当前为空格,跳过

当前为加号,转变第一个数字,得到值1,前面没有运算符,当前运算为+,继续

空格跳过

数字存入temp

数字存入temp

*运算,转变temp为整数得到20,前一个运算符为+,进行运算得到中间结果21,当前运算为*,继续

数字存入temp

=号,从temp获得整数3,前一个运算为*,计算中间结果为63,当前运算为=,打印结果63,退出

posted on 2011-03-16 10:46  benfish  阅读(522)  评论(0编辑  收藏  举报