c - 什么是 scanf ("%*s") 和 scanf ("%*d") 格式标识符?

标签 c formatting scanf

scanf() 中"%*" 格式的实际用途是什么。如果这种格式存在,那么它背后一定有某种目的。下面的程序给出了奇怪的输出。

#include<stdio.h>
int main()
{
        int i;
        char str[1024];

        printf("Enter text: ");
        scanf("%*s", &str);
        printf("%s\n", str);

        printf("Enter interger: ");
        scanf("%*d", &i);
        printf("%d\n", i);
        return 0;
}

输出:

manav@workstation:~$ gcc -Wall -pedantic d.c
d.c: In function ‘main’:
d.c:8: warning: too many arguments for format
d.c:12: warning: too many arguments for format
manav@manav-workstation:~$ ./a.out
Enter text: manav
D
Enter interger: 12345
372
manav@workstation:~$

最佳答案

对于 printf,* 允许您通过额外参数指定最小字段宽度,例如printf("%*d", 4, 100); 指定字段宽度为 4。字段宽度为 4 表示如果打印一个数字少于 4 个字符,则打印空格字符,直到字段宽度已填充。如果数字占用的空间超过指定的字段宽度,则数字按原样打印,不截断。

对于 scanf,* 表示该字段将被读取但被忽略,例如scanf("%*d %d", &i) 对于输入 "12 34"将忽略 12 并将 34 读入整数 i。

关于c - 什么是 scanf ("%*s") 和 scanf ("%*d") 格式标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155518/

相关文章:

c - 在 C 中使用 scanf 在 EOF 处退出 while 循环

c - 在预处理器指令中使用枚举值

c - 太阳 RPC : transferring binary files

java - 如何在 Java 中打印带有 2 位小数的 float ?

java - 使用 StreamResult 打印 SOAP 消息时或修改其 DOM 结构后出现未格式化的输出

c - sscanf 问题和比较数字

c++ - Char 数组无法将字符保存为其成员。使用ATmega8的密码系统

编译和分发 C 程序

javascript - 在 JavaScript 中格式化整数的最快方法?

c - 我将如何使用 fread() 进行部分读取,并在此处获得预期的输出?