Char和Int打印两个不同的值
我的代码正在读取包含整数的文件: 3. 2 1 2 2 2 3 这是按预期输出第一个数字3,但将其用作整数时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
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