有段程序是这样的:
#include <stdio.h>
int main()
{
char str[30];
scanf(“%[^\n]“,str);
printf(“%s\n”,s);
return 0;
}
请问scanf中的 格式字符是什么意思啊?
>> 本文固定链接: http://www.vcgood.com/archives/1634
有段程序是这样的:
#include <stdio.h>
int main()
{
char str[30];
scanf(“%[^\n]“,str);
printf(“%s\n”,s);
return 0;
}
请问scanf中的 格式字符是什么意思啊?
>> 本文固定链接: http://www.vcgood.com/archives/1634
你必须先 登录才能发表评论。
???
找到点东西,这个是scanf读取特定字符的写法!^表示非,只读取[]号中没列出的字符!
函数名: scanf
功能: 执行格式化输入
用法: int scanf(char *format[,argument,...]);
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
其调用格式为:scanf(“<格式化字符串>”,<地址表>);
scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
其控制串由三类字符构成:
1。格式化说明符;
2。空白符;
3。非空白符;
格式化字符串的一般形式为:[赋值抑制标记][字段宽度][精度]类型说明符其中方括号[]中的项为可选项。
赋值抑制标记*:该字符命令scanf按当前的转换说明符进行转换,但忽略转换后的结果,即不将它赋给任何变量。
字段宽度:用于指定输入字段的宽度,如果没有指定,则以空白作为结束标记。
精度:是一个字符,可以是h、l、L,用于改变它后面的类型说明符的含义。
L/l 长度修饰符输入“长“数据
h 长度修饰符 输入“短“数据
hh,ll同上h,l但仅对C99有效。
h: 用于类型说明符d、i、o、u、x、X、n前,指定参数是指向short int或unsigned short int的指针。
l: 用于类型说明符d、i、o、u、x、X、n前,指定参数是指向long或unsigned long的指针。用于类型说明符a、A、e、E、f、F、g、G前,指定参数是指向double的指针。
L: 用于类型说明符a、A、e、E、f、F、g、G前,指定参数是指向long double的指针。
hh: 用于类型说明符d、i、o、u、x、X、n前,指定参数是指向signed char或unsigned char的指针。
ll: 用于类型说明符d、i、o、u、x、X、n前,指定参数是指向long long或unsigned long long的指针。
转换说明符
格式字符说明
%a 读入一个浮点值(仅C99有效)
%A 同上
%c 读入一个字符
%d 读入十进制整数
%i 读入十进制,八进制,十六进制整数
%o 读入八进制整数
%x 读入十六进制整数
%X 同上
%s 读入一个字符串,并在末尾加上空字符。
%f 读入一个浮点数
%F 同上
%e 同上
%E 同上
%g 同上
%G 同上
%p 读入一个指针
%u 读入一个无符号十进制整数
%n 至此已读入值的等价字符数
%[...]扫描字符集合,只读取方括号里面列出的字符。遇到不匹配的字符、达到指定的宽度或用户按下回车,立即停止读取。为读取]字符,应首先列出它[]…]。在字符串末尾加上空字符。
%[^...]与[...]相同,不过只读取方括号中没有列出的字符。
%% 读%符号,不执行任何赋值操作。
空白字符
空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
非空白字符
一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
thank you!
谢谢斑竹拉!