scanf和printf详解

scanfprintf是C语言标准库中用于输入和输出的函数,它们分别定义在stdio.h头文件中。这两个函数在C++中同样可以使用,因为C++是C的一个超集。

printf函数

printf函数用于格式化输出,可以将数据输出到标准输出流(通常是屏幕)。它的原型如下:

int printf(const char *format, ...);
  • format:一个格式字符串,其中可以包含格式化占位符,如%d%f%s等。
  • ...:可变参数列表,可以是任意数量和类型的参数,它们的值将按照format字符串中指定的格式进行格式化并输出。

示例

#include <stdio.h>

int main() {
    int age = 25;
    float salary = 5000.50;
    char name[] = "John Doe";

    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("Salary: %.2f\n", salary);

    return 0;
}

在这个示例中,printf用于输出一个字符串、一个整数和一个浮点数。%s%d%f是格式化占位符,分别对应字符串、整数和浮点数。

scanf函数

scanf函数用于从标准输入流(通常是键盘)读取格式化输入。它的原型如下:

int scanf(const char *format, ...);
  • format:一个格式字符串,指定了输入数据的预期格式。
  • ...:可变参数列表,包含了指向变量的指针,这些变量将存储输入的数据。

示例

#include <stdio.h>

int main() {
    int age;
    float salary;
    char name[50];

    printf("Enter name: ");
    scanf("%s", name);
    printf("Enter age: ");
    scanf("%d", &age);
    printf("Enter salary: ");
    scanf("%f", &salary);

    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("Salary: %.2f\n", salary);

    return 0;
}

在这个示例中,scanf用于从用户那里读取一个字符串、一个整数和一个浮点数。%s%d%f是格式化占位符,分别对应字符串、整数和浮点数。注意,对于非字符串类型的变量,需要提供变量的地址(使用&运算符)。

注意事项

  1. 安全性:使用scanf时,如果不正确地处理输入,可能会导致缓冲区溢出等安全问题。因此,当读取字符串时,应该总是指定最大长度,例如scanf("%49s", name)
  2. 返回值scanfprintf都返回成功匹配和赋值的参数数量。如果输入不符合预期格式,scanf可能会返回0或负值。
  3. 输入/输出格式printfscanf的格式字符串非常灵活,支持多种格式化选项,如宽度、精度、长度修饰符等。
  4. 可读性:虽然printfscanf功能强大,但在复杂的输入输出处理中,使用fgetsputssprintf等函数可能更安全、更易于理解。

这些函数是C和C++中处理输入输出的基本工具,掌握它们对于编程非常重要。

printf格式化字符

  1. %d%i:十进制整数。
  2. %u:无符号十进制整数。
  3. %x%X:十六进制整数(小写或大写字母)。
  4. %o:八进制整数。
  5. %f:浮点数(小数点形式)。
  6. %e%E:科学计数法(小写或大写e)。
  7. %g%G:通用浮点数表示法(根据数值大小自动选择%f%e)。
  8. %a%A:十六进制浮点数(C99标准)。
  9. %c:单个字符。
  10. %s:字符串。
  11. %p:指针地址。
  12. %n:存储到目前为止已写入的字符数。
  13. %%:字面上的百分号。

scanf格式化字符

  1. %d:十进制整数。
  2. %i:整数(与%d相同)。
  3. %u:无符号十进制整数。
  4. %x%X:十六进制整数。
  5. %o:八进制整数。
  6. %f:浮点数。
  7. %lf:双精度浮点数(double)。
  8. %e, %E, %f, %g, %G:与printf相同,用于浮点数。
  9. %c:单个字符。
  10. %s:字符串。
  11. %p:指针(通常不推荐使用scanf读取指针)。
  12. %n:读取的字符数(用于int变量)。
  13. %[]:扫描字符集合(扫描字符串中的字符)。

长度修饰符

  • h:短整型(short int),或无符号短整型(unsigned short int)。
  • l:长整型(long int),或无符号长整型(unsigned long int);对于double类型,表示long double
  • ll:长长整型(long long int),或无符号长长整型(unsigned long long int)。
  • jintmax_t类型(C99标准)。
  • zsize_t类型。
  • tptrdiff_t类型。
  • Llong double类型。

精度修饰符

  • .:后面跟数字,指定精度(小数位数)。

示例

  • %5d:至少宽度为5的整数。
  • %08x:宽度为8的十六进制数,不足部分用0填充。
  • %7.2f:宽度至少为7,小数点后保留2位的浮点数。

这些格式化字符和修饰符可以组合使用,以满足各种输入输出的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值