一.格式化输入函数
1. scanf函数的使用
scanf函数的一般形式:scanf(格式控制,地址表列)
格式字符说明:
%a,%A 读入一个浮点值(仅C99有效)
%c 读入一个字符
%d 读入十进制整数
%o 读入八进制整数
%x,%X 读入十六进制整数
%s 读入一个字符串,遇空格、制表符或换行符结束。
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。
%p 读入一个指针
%u 读入一个无符号整型数
%n 至此已读入值的等价字符数
%[] 扫描字符集合
%% 读%符号
实例:
scanf(“%d”, &num); //intnum;
scanf(“%c”, &ch); //char ch;
scanf(“%f”, &f_num); //floatf_num;
scanf(“%lf”, &d_num); //double d_num;
scanf(“%s”, str); //charstr[10];
for(i = 0; i < 10; i++) //intstr[10];
{
scanf(“%d”, &a[i]);
}
scanf使用注意事项:
·scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
·scanf根据格式进行输入;scanf()的格式控制串可以使用其它非空白字符,但在输入时必须输入这些字符。
如:scanf(“%d %d”, &num1, &num2); 两个整数之间空格输入;
·scanf(“num = %d”,&num); 输入格式应为:num = 12;
·scanf中不要加’\n’,否则在输入时键入【enter】不会出现预期的结果,而是需要在输入的内容之后手动添加’\n’,才会正常输出。
2. scanf函数留下的垃圾
在scanf之后最好加上一条getchar();语句,用来处理scanf缓冲区中的垃圾值。
实例:
用户其实是想读入一个整型数据后,再读入一个字符型数据,并在屏幕上打印,可是程序运行后可以发现,程序在要求用户输入一个整型的数据后,并没有继续要求用户输入一个字符型的数据,而是直接退出程序。出现这种情况是因为scanf只会获得缓冲区中对自己有用的数据,至于回车换行,将不会将其从缓冲区中读出,这样就会影响下一个数据的输入,如果下一条读入的数据是非字符类型的倒无所谓,可是如果读入的是一个字符类型的数据,那问题就来了,由于上一次读入,输出缓冲中余留有一个回车'\n‘符号,这时调用 getchar会直接返回,且返回的值为'\n‘,这样用户就不能正常得到数据,所以一定要记得在scanf后面加一条getchar语句来清空缓冲的回车符号 。
上述程序改为:
也可在两个scanf后加入语句fflush(stdin);
还可以用“空格符”来处理缓冲区残余信息。
如何使scanf遇到空格不停止?
%[] 扫描字符集合:%[]的中括号中需要填写一个正则表达式,用于指明只读取那些字符或者不读取那些字符,中括号内的内容不是以^开头的时候,表示只读取在中括号中出现的内容,当遇到第一个没有出现的字符时,就停止读取,并把目前已经读取的内容保存到对应的字符数组中。
3.其他输入函数(gets、getchar、getc)
· scanf:遇到空格就停止,不能获取句子
·gets:
Ø 格式:gets(字符串指针或字符串数组名)
Ø 直至接受到换行符或’\0’时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
Ø 注意:本函数可以无限读取,不会判断上限,所以应该确保str的空间足够大,以便在执行读操作时不发生溢出。
·getchar:
当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。
getchar可以解决gets的溢出问题:
·getc:
Ø ch=getc(fp);此处的fp是文件指针;函数功能是从文件指针指向的文件读入一个字符,并把它作为函数值返回给字符型变量ch。
Ø 注意:针对的是字符
·scanf、gets、getchar区别实例:
二.格式化输出函数
1. printf函数的使用
printf()的基本形式: printf("格式控制字符串",变量列表);
2.printf函数格式控制详解
%a,%A 输出一个浮点值(仅C99有效)
%c 输出一个字符
%d 输出十进制整数
%o 输出八进制整数
%x,%X 输出十六进制整数
%s 输出一个字符串,遇空格、制表符或换行符结束。
%f 输出一个浮点型数
%lf 输出一个double型数
%p 输出一个指针
%u 输出一个无符号整型数
% 输出%符号
3.printf函数缓冲区
printf与scanf用的是同一个缓冲区,行缓冲。
实例:
此程序无输出,原因是printf是行缓冲,满一行输出,应在printf中加入‘\n’。
由此可见,在printf函数中,记得加上’\n’!
4.printf函数使用技巧
printf(“\033[字背景颜色;字体颜色m字符串\033[0m”);
如:printf(“\033[47;31mhello world\033[5m”);
47为字背景颜色;
31为字体颜色;
hello world是字符串;
\033[5m为控制码。
颜色代码:40-49
40:黑 41:红 42:绿 43:黄 44:蓝 45:紫 46:深绿 47:白色
字颜色:30-39
30:黑 31:红 32:绿 33:黄 34:蓝 35:紫 36:深绿 37:白色
ANSI控制码:
\033[0m:关闭所有属性
\033[1m:设置高亮度
\033[4m:下划线
\033[5m:闪烁
\033[7m:反显
\033[8m:消隐
\033[30m——\033[37m:设置前景色
\033[40m——\033[47m:设置背景色
\033[nA:光标上移n行
\033[nB:光标下移n行
\033[nC:光标右移n行
\033[nD:光标左移n行
\033[y;xH:设置光标位置
5.其他输出函数(putchar、putc、puts)
·putchar: 将字符ch输出到标准输出设备上
·putc: 将字符输出到所指的文件中
·puts:
Ø 输出字符串时要遇到'\0’也就是字符结束符才停止;
Ø puts()函数只能输出字符串,不能数值或进行格式变换。
Ø 可以将字符串直接写入puts()函数中,输出至屏幕。如:puts("Hello,TuroC2.0:");
Ø puts( "" )可以起到换行的作用。当puts遇到\0时,会输出一个\n,也就是换行。所以puts( "" )时,因为字符串本身长度为0,所以第一个字符就是\0,puts会输出一个\n,所以起到了换行的效果。也就是说, puts( "" )跟puts( "\0" )是等效的,也等效於printf( "\n" )。vv