在C中增加一个字符

在C中增加一个字符,c,char,digits,C,Char,Digits,我对c中的字符增量有一点不理解。 假设: charc='A'; 现在如果我执行c+1,那么c中的值将是'B'。这很好。 但为什么我要做以下事情: c=c+argv[1][2] 然后我在c中得到了'r',为什么 请假设参数是12345中的,argv[1][2]等于1 我试着做的是一些输入,比如说ABCDEF是接收BDFHJG,当我以循环方式从参数中执行时。但我不明白为什么上面这些对我不起作用 为什么它不工作,我能做些什么来修复它 请假设参数是12345,那么argv[1][2]等于1 不,不是

我对c中的字符增量有一点不理解。 假设:

charc='A';
现在如果我执行
c+1
,那么
c
中的值将是
'B'
。这很好。 但为什么我要做以下事情:

c=c+argv[1][2]
然后我在
c
中得到了
'r'
,为什么


请假设参数是12345中的
argv[1][2]
等于
1

我试着做的是一些输入,比如说ABCDEF是接收BDFHJG,当我以循环方式从参数中执行时。但我不明白为什么上面这些对我不起作用

为什么它不工作,我能做些什么来修复它

请假设参数是12345,那么argv[1][2]等于1

不,不是。它等于
'1'
,或者(假设为ASCII)49

'A'
(65)+
'3'
(49)=
'r'
(114)

如果要从字符
'1'
中获取整数
1
,则需要对其进行转换。演员阵容没用;一种方法是使用一些算术魔法:

char c = 'A';

const int valToAdd = argv[1][2] - '0';
c = c + valToAdd;

// c is now 66, or `'B'`

但是,这是一个小问题,如果
argv[1][2]
不在
'0'
'9'
的范围内,它就会中断。您可以进一步研究从ASCII数字中获取整数的最佳(更好的?)方法。

字符的ASCII代码是
'1'
,而不是
1
数字

因此,在12345中添加的不是
1
,而是
49

是一个由字符“i”、“n”、“1”、“2”等组成的字符串。例如,“1”不是一个数字。这是一个角色。所以在这个表达式中

c = c + argv[1][2] 
你真的有

c = c + '1'
其中,字符c与字符“1”的内部表示一起添加,该字符在ASCII表中的值为
49

要将字符“1”转换为整数值1,您可以编写例如

c = c + ( argv[1][2] - '0' ) 
或者只是

c += argv[1][2] - '0'

'A'
+
'1'
'A'
+
'3'
到底有什么意义?
argv[1][2]
等于字符值
'1'
,而不是整数值
1
。您正在将字符(ASCII 49)的编码值添加到
c
@JohnBode请使用答案部分,而不是注释部分来回答问题。干杯我用fputc(argv[1][2],标准输出)检查我自己,我得到了1@JohnD您在屏幕上看到“1”,因为屏幕上显示的是ASCII字符。那不是一回事。那我怎么能得到1而不是“1”?即使是强制转换为int也不是working@JohnD(
argv[1][2]-“0”
),但我建议您先检查以确保它是一个数字字符(
isdigit
)。否则这个表达式就没什么意义了。听起来你需要检查
字符的整数值(例如ASCII码)和它在屏幕上的表示方式(如文本)之间的差异。加入演员阵容不会有任何效果。