📜  scanf() (1)

📅  最后修改于: 2023-12-03 15:05:05.190000             🧑  作者: Mango

scanf() 简介

scanf() 是C语言中的标准输入函数,用于从标准输入设备(通常是键盘)读取格式化输入,并将结果保存到指定的变量中。它可以读取各种类型的数据,包括整数、浮点数、字符、字符串等。

函数签名
int scanf(const char *format, ...);

其中,format 表示格式化字符串,用于指定输入需要满足的格式;省略号(...)表示各种可以传递的参数,对应 format 中的格式化字符串中的占位符。

格式化字符串

scanf() 函数使用格式化字符串来指定输入格式。格式化字符串由常规字符和格式指示符组成。常规字符表示必须输入的字符,格式指示符用于表示需要输入的数据类型和数据格式。

以下是常见的格式指示符:

| 格式指示符 | 说明 | |----------|---------------| | %d | 十进制整数 | | %f | 浮点数 | | %c | 字符 | | %s | 字符串 | | %p | 指针 | | %x | 十六进制整数 | | %o | 八进制整数 | | %e | 指数计数法浮点数 | | %g | 选择 %f%e 格式 |

示例代码

下面是一个简单的示例,用于从用户输入中读取一个整数和浮点数,并输出到控制台:

#include <stdio.h>

int main() {
    int num;
    float f;

    printf("Enter an integer and a float separated by space: ");
    scanf("%d %f", &num, &f);

    printf("You entered integer: %d\n", num);
    printf("You entered float: %f\n", f);

    return 0;
}

在上面的示例中,我们使用了两个格式化字符串 %d%f 分别表示整数和浮点数。&num&f 分别表示将输入的整数和浮点数存储到 numf 变量的地址中。

注意事项

在使用 scanf() 函数时需要注意以下几点:

  • 格式化字符串中必须包含至少一个格式指示符。
  • 在输入整数时,如果输入的数值超出了指定的变量类型的范围,将导致未定义的行为。
  • 在输入字符串时,需要留足足够的缓冲区空间,以免造成缓冲区溢出。通常可以使用 %ns 格式指示符,其中 n 表示缓冲区大小。
  • scanf() 函数会读取输入缓冲区中的所有字符,包括换行符(\n),因此需要注意输入时是否包含多余的空格或换行符。
  • scanf() 函数在读取到指定格式化字符串中的值后才会返回,因此可能会出现阻塞等待输入的情况。为了避免这种情况,可以考虑使用非阻塞 IO 或使用多线程的方式实现异步读取。