Char和Int打印两个不同的值

Char和Int打印两个不同的值,c,char,printf,C,Char,Printf,我的代码正在读取包含整数的文件: 3. 2 1 2 2 2 3 这是按预期输出第一个数字3,但将其用作整数时 printf("%d", c); 而是输出51?我试图将这些数字用作二维数组中计数器和位置的输入。您正在以字符形式读取3 在系统中,'3'的十进制值为51,因此当您打印读取的值时,它将打印51 如果需要文本值,可以使用 printf("%d", c- '0'); 由于编号0到9在编码中必然会有严格递增的序列值。您的文件不包含整数3 2 2 3

我的代码正在读取包含整数的文件: 3. 2 1 2 2 2 3

这是按预期输出第一个数字3,但将其用作整数时

printf("%d", c);

而是输出51?我试图将这些数字用作二维数组中计数器和位置的输入。

您正在以字符形式读取
3

在系统中,
'3'
的十进制值为
51
,因此当您打印读取的值时,它将打印
51

如果需要文本值,可以使用

 printf("%d", c- '0');

由于编号
0
9
在编码中必然会有严格递增的序列值。

您的文件不包含整数
3 2 2 3

  • 它包含一个比特流
  • 8位的组可以组合在一起。这些分组称为字节
  • 这些字节由一个字符解释 编码(最有可能是ASCII或UTF-8),以表示字符
    3 2 3

字符编码是字节模式与其关联的字符之间的映射。例如,UTF-8声明
11111111 000000000 10011111 10011000 10000011
映射到字符Unicode字符1F603,“张开嘴的笑脸”:字符根据。您的系统似乎使用了。每个字符都有各自的ASCII码整数值,该整数值决定了该字符在内存中的存储方式

'1'
具有ASCII值
49
'2'
具有ASCII值
50
'3'
具有ASCII值
51

以下是标准ASCII集的列表:

使用
printf(“%c”,c)时
c
作为字符读取。由于
c
保存字符
'3'
,它将打印字符值
3

使用
printf(“%d”,c)时
相反,
c
被读取为整数,打印的不是
3
,而是它的相对ASCII码值,即
51

我试着用这些数字作为计数器的输入和2D数组中的位置

如果要将此字符值转换为整数,可以使用
c-“0”
并将其分配给另一个变量:

int c = fgetc(fptr); 
int i_c = c - '0';

printf("%d", i_c);
或再次回到
c

int c = fgetc(fptr); 
c = c - '0';

printf("%d", c);
两种情况下的输出:

3

或者只使用%c。这就是它的初衷。为什么要跳过不太便携的铁环?
3