第四章 - 字符串和格式化输入输出——scanf()函数
2010-03-21 16:02
239 查看
1、scanf()函数把输入的字符串转换成各种形式:整数、浮点数、字符和C的字符串。
2、printf()把%f、%e、%E、%g、%G同时用于float类型和double类型,而scanf()只把他们用于float类型,而用于double类型时要求使用l修饰符。
3、scanf()的转换说明符
4、scanf()转换修饰符
5、scanf()读取原理:
假设使用%d来读取一个整数。scanf()跳过空白字符(空格、制表符和换行符)直到遇到非空白字符。因为他试图读取一个整数,所以他发现一个数字字符或者一个符号。一直连续读取并保存,直到遇到一个非数字的字符,遇到后则定位读取到了整数的尾部。scanf()把这个非数字字符放回输入,这意味着当程序下一次开始读取输入时,将从前面被放弃的那个非数字字符开始读取。
如果使用了字符宽度,那么scanf()在字段结尾或者在第一个空白字符处(二者先到达的一个)终止。
如果第一个非空白字符不是数字,则scanf()会停在,不会赋给指定的变量。
如果使用%s说明符,那么空白字符意外的所有字符都是可以接受的,如果指定存储到一个数组中,则会自动的加入结尾符。
如果使用%c说明符,那么所有的输入字符都是平等的,不会跳过空白符或者换行符。
6、用户输入需要与要求输入的格式相同。如scanf("%d,%d",&a,&b),则在输入时必须加入逗号。
7、除了%c以外的说明符会自动跳过输入项之前的空格,即scanf("%d",&n)与scanf(" %d",&n)是相同的,而scanf("%c",&ch)读取在输入中遇到的第一个字符,而scanf(" %c",&ch)则会读取遇到的第一个非空白字符。
eg:读取 -13.45e12# 0(第一个是空格)
%d -- -13
%f -- -13.45e12
%s -- -13.45e12#
%c -- (空格符)
8、scanf()函数返回成功读入的项目个数,当未读到内容时,返回0,检测到“文件结尾时”,返回EOF(end of file)。
2、printf()把%f、%e、%E、%g、%G同时用于float类型和double类型,而scanf()只把他们用于float类型,而用于double类型时要求使用l修饰符。
3、scanf()的转换说明符
转换说明符 | 意义 |
%c | 把输入解释成一个字符 |
%d | 把输入解释成一个有符号十进制整数 |
%e、%f、%g、%a | 把输入解释成一个浮点数 |
%E、%F、%G、%A | 把输入解释成一个浮点数 |
%i | 把输入解释成一个有符号十进制整数 |
%o | 把输入解释成一个有符号八进制整数 |
%p | 把输入解释成一个指针(一个地址) |
%s | 把输入解释成一个字符串;输入内容以第一个非空白字符作为开始,并且包含直到下一个空白字符的全部字符。 |
%u | 把输入解释成一个无符号十进制整数 |
%x、%X | 把输入解释成一个有符号十六进制整数 |
修饰符 | 意义 |
* | 滞后赋值 |
digit(s) | 最大字段宽度;在达到最大字段宽度或者遇到第一个空白字符时(无优先原则)停止对输入项的读取 |
hh | 把整数读作signed char或unsigned char |
ll | 把整数读作long long或者unsigned long long |
h,l或L | %hd,%hi -- 存储在short int中 %ho,%hx,%hu -- 存储在unsigned short int中 %ld,%li -- 存储一个long中 %lo,%lx,%lu -- 存储在unsigned long中 %le,%lf,%lg -- 以double类型存储 将L(非l)与e、f和g一起使用指示该值以long double类型存储 如果没有这些修饰符,d、i、o和x指示int型 而e、f、g指示float型。 |
假设使用%d来读取一个整数。scanf()跳过空白字符(空格、制表符和换行符)直到遇到非空白字符。因为他试图读取一个整数,所以他发现一个数字字符或者一个符号。一直连续读取并保存,直到遇到一个非数字的字符,遇到后则定位读取到了整数的尾部。scanf()把这个非数字字符放回输入,这意味着当程序下一次开始读取输入时,将从前面被放弃的那个非数字字符开始读取。
如果使用了字符宽度,那么scanf()在字段结尾或者在第一个空白字符处(二者先到达的一个)终止。
如果第一个非空白字符不是数字,则scanf()会停在,不会赋给指定的变量。
如果使用%s说明符,那么空白字符意外的所有字符都是可以接受的,如果指定存储到一个数组中,则会自动的加入结尾符。
如果使用%c说明符,那么所有的输入字符都是平等的,不会跳过空白符或者换行符。
6、用户输入需要与要求输入的格式相同。如scanf("%d,%d",&a,&b),则在输入时必须加入逗号。
7、除了%c以外的说明符会自动跳过输入项之前的空格,即scanf("%d",&n)与scanf(" %d",&n)是相同的,而scanf("%c",&ch)读取在输入中遇到的第一个字符,而scanf(" %c",&ch)则会读取遇到的第一个非空白字符。
eg:读取 -13.45e12# 0(第一个是空格)
%d -- -13
%f -- -13.45e12
%s -- -13.45e12#
%c -- (空格符)
8、scanf()函数返回成功读入的项目个数,当未读到内容时,返回0,检测到“文件结尾时”,返回EOF(end of file)。
相关文章推荐
- 第四章 - 字符串和格式化输入输出——printf()函数
- 格式化输入函数scanf()及输入输出函数的*修饰符
- C primer plus 第四章字符串和格式化输入输出 个人编程练习
- 第四章 - 字符串和格式化输入输出——字符串
- C Primer Plus 5th 翻译 第四章:字符串和格式化输入/输出(一)
- C Primer Plus 5th 翻译 第四章:字符串和格式化输入/输出
- sprintf() 函数把格式化的字符串写入变量中。
- C库提供了三个读取字符串的函数:gets( ) fgets( ) scanf( )。
- PHP格式化字符串函数 sprintf()
- 将printf函数格式化输出的内容存储到字符串数组里
- C语言中的格式化输入输出函数
- scanf(),printf()和gets(),puts()在输入输出字符串时的区别
- 格式化输入函数scanf
- python笔记---字符串格式化函数format
- 解决scanf_s函数报错:没有为格式字符串传递足够的参数
- php中格式化输出函数vprintf printf sprintf sscanf
- 强大的字符串格式化函数 - format
- Linux kernel ‘register_disk’函数格式化字符串漏洞
- C Primer Plus 第4章 字符串和格式化输入输出--4.3 常量和预处理器
- scanf 格式化字符串详解