在C中增加一个字符
我对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 不,不是
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码)和它在屏幕上的表示方式(如文本)之间的差异。加入演员阵容不会有任何效果。