跪求C语言高手帮忙解释一下下面这段代码中“%*d”的含义

main(){ int i=0,j=0,k=0; scanf("%d%*d%d",&i,&j,&k); printf("%d%d%d尀n",i,j,k);}
2025-01-02 19:07:57
推荐回答(4个)
回答1:

%*d是抑制赋值的意思,即让scanf匹配一个%d,但不将这个%d赋值给变量。这里的话,i=第一个数,j=第三个数,k并没有被赋值。

回答2:

scanf("%d%*d%d",&i,&j,&k);
这里表示输入的i,j,k是int型的;
printf("%d%d%d\n",i,j,k);
这里表示输出的i,j,k是int型的;
%d表示输入输出的类型控制。

另外像%f表示float型的输入输出;%ld表示long int型输入输出;%lf表示double型输入输出;
%c表示char型输入输出...

回答3:

%d 是格式控制符号,表示整数,告诉编译器要读取的数据是个整形。

回答4:

* (.*)
all
这个字符用法为不定长的长度,例如%2d,%3d, %*n , %.*f , etc;

printf( "address [%0*d]\n",8, myFunc) == printf( "address [%08d]\n", myFunc);

%
None
%% 打印一个%

0, #, -, +,(space)

0,+, -, 为右对齐或者左对齐。例如 printf(“%-8d%8d”,1234,5677), 默认为右对齐(“+”), 0做补位填充使用

Space为空位,如果是space和”+”,没有其他,这些space将被忽略, #

c
int or int_t
单个字符,如果使用 wprintf 将是宽字符

C
int or int_t
宽字符 如果使用 wprintf 将是单字符

s
String
单字节字符串使用printf 如果使用 wprintf 就是宽字符串,如果空串,结果是"(null)"

S
String
宽字符串使用printf 如果使用 wprintf 就是单字节字符串,如果空串,结果是"(null)"

w
String,char
打印 char or string,宽字符打印,不喜欢用 W2A的用这个 sprintf(str,"%ws",L"abcde");

d,i,I64I32,I
Int
十进制整形 I64d, i64d 打印64位整形 ui64d无符号64位整形, 末尾d不是必须,I 与平台相关。

l(小写L) ,ll
Int
长整型 printf( "%ld", myFunc), ll 为(long,long)

h
Int
短整形,四字节截取成双字节。

L
Double,float
打印成Long double 类型. 作用于 e,E,f,g,G

o
int
八进制无符号整形

u
int
无符号整形

x
int
无符号十六进制整形,小写 “abcdef”

X
int
无符号十六进制整形,大写 “ABCDEF”

e
double
3.9265e+2,幂形式的浮点数,小写e

E
double
3.9265E+2,幂形式的浮点数,大写E

f
double
打印单精度浮点数

g
double
短的 %e 或者%f

G
double
短的 %E 或者%f

a
double
有符号,双精度浮点数指针地址 0Xh.hhhh p±dd

A
double
有符号,双精度浮点数指针地址 0Xh.hhhh P±dd

n
Pointer to integer
到目前为止缓冲区都有啥取之. printf( "12345%n6789\n", &i ); i就等于5啦

p
Pointer to void
打印物理地址,相当于 printf( "%0*x", 2 * sizeof(void *), &i);