C语言 (四)

 一、putchar 函数

putchar 是一个输出函数,函数原型如下:

int putchar(int c); 
  • int 是函数的返回类型,表示输出的字符(以 ASCII 值形式);

  • int c 是函数的形参,表示要输出的字符,其本质是一个整数。形参就是函数定义中用于接收调用者传入数据的变量。

示例:putchar('1'); // 输出字符 1

    putchar(49); // 输出字符 1,因为 49 是 '1' 的 ASCII 值


二、getchar 函数

getchar 是一个用于接收单个字符输入的函数,函数原型如下:

int getchar(void);

  • void 表示该函数没有参数;

  • 函数的作用是从标准输入(通常是键盘)中读取一个字符,并返回它的 ASCII 值;

  • 每次调用 getchar(),都会从缓冲区取走一个字符。

示例:

char ch = getchar(); // 等待用户输入一个字符,并存入变量 ch


三、printf 函数

printf 用于格式化输出,函数结构为:

printf("格式控制字符串", 输出参数列表);

示例:

printf("Hello %d world %d!\n", 1234, 2345);

  • %d占位符,表示输出有符号十进制整数;

  • 它会被后面的参数值(1234 和 2345)依次替换;

  • 如果占位符数量多于实际参数值,程序会输出随机值或发生未定义行为。

常见格式控制符:

控制符 含义与说明
%d 以十进制整形数据的实际长度输出
%md 指定最小输出宽度 m,不足用空格补齐
%0md 不足的部分用 0 补齐,例如 %010d
%ld 输出长整型 long 类型
%lld 输出 long long 类型数据
%o 以 8 进制输出,无符号整数
%x 以 16 进制输出,无符号整数
%#o, %#x 输出 8/16 进制时加前缀,便于区分(如 0x、0o)
%u 输出无符号 10 进制整数
%f 输出浮点数(默认保留 6 位小数)
%m.nf m 是总宽度(总宽度中,小数点也算一位),n 是小数位数,例如 %8.2f
%e, %E 以科学计数法输出浮点数(会自动将 float 转为 double)
%g 以更短方式输出浮点数(自动选择 %f%e
%c 输出一个字符,类似 putchar
%s 输出字符串,例如 printf("Hello %s\n", "world");
注意:字符串是字符数组的首地址,需用双引号包围字符串
%p 输出地址(指针),即所谓“万能指针”,例如 printf("Hello %p\n", "world");结果为Hello加w在内存中的地址
%% 输出一个 % 字符,例如 printf("9%%") 输出为 9%,第一个 % 为占位符起始,第二个为实际内容

C语言 (四)_第1张图片C语言 (四)_第2张图片

四、scanf 函数

scanf 用于从标准输入读取格式化数据,函数格式如下:

scanf("格式控制", 地址表列);

地址表列是多个地址组成的表,可以是变量的地址或字符串首地址。

示例:

int a, b;

scanf("%d%d", &a, &b); 

  • %d 不能写成 %d\n,否则会导致输入缓冲区行为异常;

  • &a&b 表示变量的地址,若忘记加 &,程序将尝试访问非法地址,可能会崩溃;

  • 字符输入(如 %c)时,空格、换行等字符也会被读取;

  • 除了占位符外,如果格式字符串中包含其他字符,输入时也要输入对应字符,否则无法成功解析。

示例:

scanf("a=%d,b=%d", &a, &b); // 输入时必须写成 a=10,b=20

scanf 读取浮点数:

  • 单精度使用 %f,双精度使用 %lf

  • 注意:浮点数输入不能使用宽度限定符,例如 %8.2fscanf 中是不允许的,只能用 %f

示例:

float f; scanf("%f", &f); // 正确

double d; scanf("%lf", &d); // 正确


五、输入缓冲区

输入缓冲区是系统临时保存用户输入内容的一段内存空间,以队列形式存在。由于设备运行速度不同(如用户输入慢,CPU处理快),系统需要用缓冲区协调。

你可能感兴趣的:(C语言 (四))