格式化输入输出

一.格式化输入函数

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值