字符的输入输出

字符的输入输出与双重性解析

char 类型在内存中本质存储的是整数(ASCII码),其表现形式是字符还是数字,完全取决于格式说明符和人为解释。

1. 字符的输入与输出

使用 scanf() 配合 %c 读取单个字符,使用 printf() 配合 %c 输出字符、配合 %d 输出其整数值(ASCII码)。

#include <stdio.h> 
int main(void)
{
	char ch = 0;
	scanf("%c",&ch);   // 读取单个字符
	printf("\n%c",ch); // 按字符显示
	printf("\n%d",ch); // 按数值显示
	return 0;
}Code language: PHP (php)

核心概念:计算机只认内存中的二进制数(如 70)。用 %c 解释则显示为 'F',用 %d 解释则显示为数字 70。数据的含义是我们赋予它的。

2. 实例一:字符与不可见字符的输出(对应图1)

#include <stdio.h>
int main(void)
{
  char first = 'T';   // ASCII 84
  char second = 20;   // ASCII 20 属于不可见控制字符(设备控制四)

  printf("\n第一个例子以字符方式显示 - %c", first);
  printf("\n第一个例子以数值方式显示 - %d", first);
  printf("\n第二个例子以字符方式显示 - %c", second);
  printf("\n第二个例子以数值方式显示 - %d\n", second);
  return 0;
}Code language: PHP (php)

运行结果对照(与图1完全一致):

  • first 为 'T':字符显示 T,数值显示 84。
  • second 为 20:数值显示 20;字符显示时出现乱码/方块框(因为 20 是控制字符,终端无法打印可见图形,显示为占位符方框)。

3. 实例二:字符运算与整型提升(对应图2)

#include <stdio.h>
int main(void)
{
  char first = 'A';   // 65
  char second = 'B';  // 66
  char last = 'Z';    // 90
  char number = 40;   // '('

  char ex1 = first + 2;   // 65+2=67 -> 'C'
  char ex2 = second - 1;  // 66-1=65 -> 'A'
  char ex3 = last + 2;    // 90+2=92 -> '\' (反斜杠)

  printf("字符的值      %-5c%-5c%-5c", ex1, ex2, ex3);
  printf("\n数值等价 %-5d%-5d%-5d", ex1, ex2, ex3);
  printf("\n这个数值 %d 对应的字符 %c\n", number, number);
  return 0;
}Code language: PHP (php)

运算与输出解析:

变量/表达式计算过程(整型提升为int运算)截断存回char的值字符显示 (%c)数值显示 (%d)
ex1'A'(65) + 267C67
ex2'B'(66) - 165A65
ex3'Z'(90) + 292“ (转义符)92
number直接赋值 4040( (左括号)40

运行结果对照(与图2完全一致):

  • 字符行输出:C A \`(注:` 为可见反斜杠,截图终端显示正常)。
  • 数值行输出:67 65 92。
  • 末尾输出:这个数值 40 对应的字符 (。

4. 核心规则与注意事项

机制说明
输入/输出解释​内存数据不变,格式符 %c 映射为字符,%d 映射为整数。
算术运算​char 参与运算先整型提升为 int,计算后截断回 char 赋值。
不可见字符​0~31 及 127 为控制字符,用 %c 输出通常显示空白或方框。
溢出/截断​运算结果超范围(如带符号 >127)会回绕成负数/乱码(如 ex3 的 92 仍在范围内)。

Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注