一、单个字符的输入输出
(一)、字符常量
1、定义:用单引号括起来的一个字符。例如:‘a’是字符常量,而a则是标识符。
2、转义字符:即以反斜线开头的字符序列来描述特定的控制字符。
常见的转义字符如下表:
字符 | 含义 |
' \n ' ' \r ' ' \o ' ' \t ' ' \v ' ' \b ' ' \f ' ' \a ' ' \" ' ' \' ' ' \\ ' ' \? ' ' \ddd ' ' \xhh ' | 换行 回车 空字符,通常用作字符串结束标志 水平制表(相当于按下tab键) 垂直制表 退格 走纸换页 响铃报警提示音 一个双引号 单引号 一个反斜线 问号 1到3位八进制ASCII码值所代表的字符 1到2位十六进制ASCII码值所代表的字符 |
每次按下tab键,并不是从当前光标位置向后移动一个tab宽度,而是移动到下一个制表位,实际移动的宽度视当前光标位置距相邻的下一个制表位的距离而定。
注:当转义序列出现在字符串中时,是按照单个字符计数的。例如:字符串“abc\n”的长度是4,而非5,“\n”是一个字符。
(二)、字符的输入输出
getchar() 和putchar()是C标准函数库中专门用于字符输入和输出的函数。
函数putchar()的作用是把一个字符输出到屏幕的当前光标位置;而getchar()的作用是从键盘读取字符。
#include<stdio.h>
int main()
{
char ch;
printf("Press a key and then press Enter:");
ch=getchar();
ch=ch+32;//将大写转换为小写
putchar(ch);//在屏幕上显示ch中的字符
putchar('\n');//输出一个回车换行控制符
return 0;
}
注意:函数getchar()没有参数,函数的返回值就是从终端键盘读入的字符。
二、数据的格式化屏幕输出
(一)、函数printf()的一般格式
printf(格式控制字符串);printf(格式控制字符串,输出值参数表);
格式控制字符串是用双引号括起来的字符串,也称为转换控制字符串,输出值参数表中可有多个输出值,也可以没有
1、格式控制字符串:
(1)、格式转换说明:由%开始,并以转换字符结束,用于指定各输出值参数的输出格式
(2)、需原样输出的普通字符
%d | 输出带符号的十进制整数,正数的符号省略 |
%u | 以无符号的十进制整数形式输出 |
%o | 以无符号的八进制整数形式输出,不输出前导符0 |
%x | 以无符号十六进制整数形式(小写)输出,不输出前导符0x |
%X | 以无符号十六进制整数形式(大写)输出,不输出前导符0x |
%c | 输出一个字符 |
%s | 输出字符串 |
%f | 以十进制小数形式输出实数(包括单、双精度),整数部分全部输出,隐含输出6位小数,输出的数字并非都是有效数字,单精度实数的有效位数一般是7位,双精度一般是16位。 %f适合于输出像3.14这样的小数位较少的实数,可以使实数的输出的宽度较小 |
%e | 以指数形式(小写e代表指数部分)输出实数,要求小数点前必须有且仅有一位非零数字。 %e适合于输出像1.0e+10这样的小数位较多的实数,可以使实数输出的宽度较小 |
%E | 以指数形式(大写e代表指数部分)输出实数 |
%g | 自动选取f或e格式中输出宽度较小的一种使用,且不输出无意义的0 |
%% | 输出% |
(二)、函数printf()中的格式修饰符
在printf()的格式说明中,还可在%和格式符中间插入下表的格式修饰符,用于对输出数据进行微调,如:指定输出数据域宽、显示精度、左对齐等。
格式修饰符 | 用法 |
l | 修饰格式符d,o,x,u时,用于输出long 类型 |
L | 修饰格式符f,e,g时,用于输出long double类型 |
h | 修饰格式符d,o,x时,用于输出short类型 |
输出域宽m (m为整数) | 指定输出项所占的列数。 若m为正整数,当输出数据宽度小于m时,在域内向右靠齐,左边多余位补空格;当输出数据大于m时,按实际宽度全部输出;若m有前导符0,则左边多余位补0。 若m为负整数,则输出数据在域内向左靠齐。 |
显示精度 .n (n为大于等于0的整数) | 精度修饰符位于最小域宽修饰符之后,由一个圆点及其后的整数构成。 对于浮点数,用于指定输出的浮点数的小数位数。 对于字符串,用于指定从字符串左侧开始截取的子串字符串个数。 |
注:输出long long 类型的数据用%164d(注意是大写的I,不是数字1).
#include<stdio.h>
int main()
{
const double Pi=3.14159;
float r;
double S,C;
printf("请输入半径r:");
scanf("%f",&r);
printf("S=%7.2f,C=%7.2f",Pi*r*r,2*r*Pi);
return 0;
}
这里%7.2f表示输出数据所占的域宽为7(输出数据占7个字符宽度),显示的精度为2(保留两位小数),小数点也会占一个字符位置。
在88.25和33.30前有两个空格。
如果改为%7.0f,则输出将变为
在88和33前有五个空格。
三、数据的格式化键盘输入
(一)、函数scanf()的一般格式
scanf(格式控制字符串,参数地址表);
格式控制字符串是用双引号括起来的字符串,它包括格式转换说明符和分隔符两个部分。
%d | 输入十进制整数 |
%o | 输入八进制整数 |
%x | 输入十六进制整数 |
%c | 输入一个字符,空白字符(包括空格、回车、制表符)也作为有效字符输入 |
%s | 输入字符串,遇到空白字符(空格、回车、制表符)时,系统认为读入结束(但在开始读之前遇到的空白字符会被系统跳过) |
%f和%e | 输入实数,以小数或指数形式输入均可 |
%% | 输入一个% |
参数地址表是由若干变量的地址组成的列表,这些参数之间用逗号隔开。
(二)、函数scanf()中的格式修饰符
格式修饰符 | 用法 |
l | 放在d,o,x,u之前时,用于输入long 类型;放在f、e之前时,用于输入double类型 |
L | 修饰格式符f,e时,用于输入long double类型 |
h | 修饰格式符d,o,x时,用于输入short类型 |
域宽m (m为整数) | 指定输入项所占的列数,系统自动按此宽度截取数据 |
显示精度 .n (n为大于等于0的整数) | scanf()没有精度修饰符,即用scanf()输入实型数据时不能规定精度 |
忽略输入修饰符* | 表示对应的输入项在读入后不赋给相应的变量 |
在遇到以下几种情况时,认为数据输入结束:
(1)、遇到空格符、回车符、制表符;
(2)、达到输入域宽;
(3)、遇到非法字符输入。
注意:如果scanf()函数中的格式控制字符串中存在除格式说明符以外的其他字符,那么这些字符必须在输入数据时由用户从键盘原样输入。参数地址表一定要记得加上"&"。
例题:
例一:写一个程序,将接收的摄氏温度转换为对应的华氏温度。程序应显示如下的提示信息: Please input cels: 然后输入一个十进制数并回车,然后程序以合适的消息形式输出转换后的华氏温度。 程序使用如下的公式完成转换:fahr=9/5*cels+32 **输入格式要求:"%lf" 提示信息:"Please input cels: " **输出格式要求:"The fahr is: %.2f" 程序运行结果示例: Please input cels: 32 The fahr is: 89.60
#include<stdio.h>
int main()
{
int cels;
float fahr;
printf("Please input cels: ");
scanf("%d",&cels);
fahr=9.0/5*cels+32;
printf("The fahr is: %.2f",fahr);
return 0;
}