从这一课开始,终于可以愉快地编码了.
首先介绍两个库函数, printf() 和 scanf();
其实很不愿意先讲解printf()的,容易养成不调试的坏毛病.
但是为了给初学者 增加学习的兴趣,还是讲了吧
<一>输出:
在C语言中,有三个函数可以用来在显示器上输出数据:
- puts():只能输出字符串。
- putchar():只能输出单个字符。
- printf():可以输出各种类型的数据。
printf() 是最灵活、最复杂、最常用的输出函数,完全可以替代 puts() 和 putchar(),大家一定要掌握。
还记得这个吧:
printf("Hello World !\n");
下边是函数原型和用法:
原型:extern void printf(const char *format,...); 用法:#include <stdio.h> 功能:格式化字符串输出 说明:format指定输出格式,后面跟要输出的变量 目前printf支持以下格式:
Code | 格式 |
%c | 字符 |
%d | 带符号整数 |
%i | 带符号整数 |
%e | 科学计数法, 使用小写"e" |
%E | 科学计数法, 使用大写"E" |
%f | 浮点数 |
%g | 使用%e或%f中较短的一个 |
%G | 使用%E或%f中较短的一个 |
%o | 八进制 |
%s | 一串字符 |
%u | 无符号整数 |
%x | 无符号十六进制数, 用小写字母 |
%X | 无符号十六进制数, 用大写字母 |
%p | 一个指针 |
%n | 参数应该是一个指向一个整数的指针指向的是字符数放置的位置 |
%% | 一个'%'符号 |
一个位于一个%和格式化命令间的整数担当着一个最小字段宽度说明符,并且加上足够多的空格或0使输出足够长. 如果你想填充0,在最小字段宽度说明符前放置0. 你可以使用一个精度修饰符,它可以根据使用的格式代码而有不同的含义.
- 用%e, %E和 %f,精度修饰符让你指定想要的小数位数. 例如,
%12.6f
将会至少显示12位数字,并带有6位小数的浮点数.
- 用%g和 %G, 精度修饰符决定显示的有效数的位数最大值.
- 用%s,精度修饰符简单的表示一个最大的最大长度, 以补充句点前的最小字段长度.
%-12.4f
将会显示12位字符,4位小数位的浮点数并且左对齐. 你可以修改带字母l和h%d, %i, %o, %u和 %x 等类型说明符指定长型和短型数据类型 (例如 %hd 表示一个短整数). %e, %f和 %g 类型说明符,可以在它们前面放置l指出跟随的是一个double. %g, %f和 %e 类型说明符可以置于字符'#'前保证出现小数点, 即使没有小数位. 带%x类型说明符的'#'字符的使用, 表示显示十六进制数时应该带'0x'前缀. 带%o类型说明符的'#'字符的使用, 表示显示八进制数时应该带一个'0'前缀.
extern void printf(const char *format,...);
这个函数比较特别,是一个不定参数函数,也就是说参数个数可以使1个,也可以是多个.
通常我们遇到湖综合自己编写的函数参数都是定长的.
printf()的返回值是打印的字符数,如果发生错误则返回一个负值.
printf 是 print format 的缩写,意思是“格式化打印”。这里所谓的“打印”就是在屏幕上显示内容,与“输出”的含义相同,所以我们一般称 printf 是用来格式化输出的。
格式控制符
它指明了以何种形式输出数据。格式控制符均以%
开头,后跟其他字符。
%d 表示以十进制形式输出一个整数。除了 %d,printf 支持更多的格式控制,例如:
- %c:输出一个字符。c 是 character 的简写。
- %s:输出一个字符串。s 是 string 的简写。
- %f:输出一个小数。f 是 float 的简写。
举例:
<1>输出单个字符
char c='A';
printf("%c",c);
<2>输出一个字符串
char *str1="Hello World !";
char str2[]="Hello C !";
printf("%s\n%s\n",str1,str2);
int age=10;
double weight=36.2;
printf("age=%d\n weight=%d",age,weight);
<二>输入:
程序是人机交互的媒介,有输出必然也有输入。在C语言中,有多个函数可以从键盘获得用户输入:
- scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
- getchar()、getche()、getch():这三个函数都用于输入单个字符。
- gets():获取一行数据,并作为字符串处理。
语法:
#include <stdio.h> int scanf( const char *format, ... ); |
scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并保存数据到其它参数. 它和printf()有点类似.format(格式)字符串由控制字符,空白字符和非空白字符组成. 控制字符以一个%符号开始,如下:
控制字符 | 说明 |
%c | 一个单一的字符 |
%d | 一个十进制整数 |
%i | 一个整数 |
%e, %f, %g | 一个浮点数 |
%o | 一个八进制数 |
%s | 一个字符串 |
%x | 一个十六进制数 |
%p | 一个指针 |
%n | 一个等于读取字符数量的整数 |
%u | 一个无符号整数 |
%[] | 一个字符集 |
%% | 一个精度符号 |
scanf()读取匹配format(格式)字符串的输入.
当读取到一个控制字符, 它把值放置到下一个变量. 空白(tabs, 空格等等)会跳过. 非空白字符和输入匹配, 然后丢弃.
如果是一个在%符号和控制符间的数量, 那么只有指定数量的字符转换到变量中.
如果scanf()遇到一个字符集(用%[]控制字符表示), 那么在括号中的任意字符都会读取到变量中.
scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.
举例:
<1>输入单个字符
char c='A';
scanf("%c",&c);
<2>输出一个字符串
char str[20];
scanf("%s",str);
int age=10;
double weight=36.2;
scanf("%d%d",&age,&weight);
学习了以上,就可以做一个简单的计算器了.
====================================================
转义字符:
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。