下表列出了scanf函数的转换字符及其含义。
转换字符 | 含义 |
---|---|
d | 将输入读取为带符号的十进制整数。 |
i | 将输入读取为有符号整数。如果输入从0开始,则输入被假定为八进制。如果输入以0x或0X开始,则假设为十六进制输入;否则为十进制输入。 |
o | 读取输入,假设它是一个带符号的八进制整数。 |
u | 将输入读取为无符号整数。 |
x | 将输入读取为带符号的十六进制整数。 |
c | 读取字段宽度指定的字符数为类型char,包括空格。如果字段宽度规范不存在,将读取一个字符。要忽略前面的空格,请在格式规范之前加一个空白字符。 |
s | 读取一串连续的非空白字符作为类型char,从下一个非空白字符开始。 |
[] | 从方括号中的指定集中读取字符。集合中没有找到的第一个字符结束输入。%[] ab]读取字符,只要它们是a,b或。只要不是a,b或],%[^] ab]读取字符。 |
a,A,e,E,f,F,G 或 g | 将输入转换为float类型。输入中的符号,小数点和指数是可选的。 |
% | 读取一个%字符。跳过%字符是%%。 |
p | 读取输入作为指针。参数应为void **类型。 |
n | 没有读取输入,但从键盘读取的字符数存储在参数中。 |
下表列出了转换规格中的选项示例。
规范 | 描述 |
---|---|
%lf | 读取下一个值作为double类型。 |
%*d | 读取下一个整数值,但不要存储它。 |
%15c | 读取接下来的15个字符作为类型char。 |
\n%c | 读取下一个字符为类型char忽略空格字符。 |
%10lld | 读取接下来的十个字符作为long long类型的整数值。 |
%Lf | 读取下一个值作为long double类型的浮点值。 |
%hu | 读取下一个值作为无符号短类型。 |
#include <stdio.h>
int main(void) {
int i = 0;
int j = 0;
int value_count = 0;
float fp1 = 0.0f;
printf("Enter: fp1 = 3.1 i = 7 8\n");
printf("\nInput:");
value_count = scanf("fp1 = %f i = %d %d", &fp1, &i , &j);
printf("\nOutput:\n");
printf("Count of values read = %d\n", value_count);
printf("fp1 = %f\ti = %d\tj = %d\n", fp1, i, j);
return 0;
}
上面的代码生成以下结果。
#include <stdio.h>
int main(void)
{
float fp1 = 0.0f;
float fp2 = 0.0f;
float fp3 = 0.0f;
int value_count = 0;
printf("Enter: 3.14.314E1.0314e+02\n");
printf("Input:\n");
value_count = scanf("%f %f %f", &fp1, &fp2, &fp3);
printf("\nOutput:\n");
printf("Number of values read = %d\n", value_count);
printf("fp1 = %f fp2 = %f fp3 = %f\n", fp1, fp2, fp3);
return 0;
}
上面的代码生成以下结果。
我们可以使用格式说明符%x从输入流读取十六进制值。
对于八进制值,您使用%o。
#include <stdio.h>
int main(void) {
int i = 0;
int j = 0;
int k = 0;
int n = 0;
printf("Enter three integer values:");
n = scanf(" %d %x %o", &i , &j, &k );
printf("\nOutput:\n");
printf("%d values read.\n", n);
printf("i = %d j = %d k = %d\n", i, j, k );
return 0;
}
上面的代码生成以下结果。
您可以使用格式说明符%c读取单个字符并将其存储为类型char。
要读取一串字符,您可以使用说明符%s或说明符%[]。
%[aeiou]将读取仅由元音组成的字符串。
不是元音的第一个字符将表示字符串的末尾。
%[^ aeiou]读取一个字符串,其中包含不是元音的任何字符。
第一个元音或空格字符将表示字符串的末尾。
%[]规范使您能够读取一个包含空格的字符串,并且%s规范不能这样做。
您只需要将一个空格作为方括号之间的字符之一。
#include <stdio.h>
int main(void){
char initial = " ";
char name[80] = { " " };
char age[4] = { "0" };
printf("Enter your first initial: ");
scanf("%c", &initial, sizeof(initial));
printf("Enter your first name: " );
scanf("%s", name, sizeof(name));
fflush(stdin);
if(initial != name[0])
printf("%s,you got your initial wrong.\n", name);
else
printf("Hi, %s. Your initial is correct. Well done!\n", name );
printf("Enter your name and age separated by a comma:\n" );
scanf_s("%[^,] , %[0123456789]", name, sizeof(name), age, sizeof(age));
printf("\name is %s is %s years old.\n", name, age );
return 0;
}
上面的代码生成以下结果。