我在下面编写了一个函数来获取char
数组并操纵它的值(即,如果它是一个数字,则将char转换为int)。但是,我对如何管理char数组有疑问。当我查看input[i]
时,它是正确的值(放在数组中的值。但是,&input[i]
给出了大写字母,我不知道为什么会这样做。例如,如果我输入" 11"并跟踪变量,我可能得到以下结果:
input[0] is 1
&input[0] is D
input[1] is 1
&input[1] is E
在我的代码中,如果我尝试使用input[i]
,我会得到&#34的错误;传递参数使得指针来自整数而没有强制转换"。如果我使用&input[i]
,代码会编译,但我得到了错误的结果。这是怎么回事,我如何获取我想要获得的价值?
以下是我的代码:
void myFunction(char *input) {
Queue* numberQueue = queue_new();
Queue* opQueue = queue_new();
int i = 0;
int j;
for (j = 0; j < strlen(input); j++) {
printf("input[%d] is %c\n", i, input[i]);
printf("&input[%d] is %c\n", i, &input[i]);
int number = (int)input[i];
/* queue_push_tail(queue, data) */
queue_push_tail(numQueue, number); /* ERROR */
/* rest of code omitted */
i++;
}
}
答案 0 :(得分:0)
如果我知道你想将input
字符串中的每个数字推入queue_push_tail
,作为整数值,那么你希望你的循环做这样的事情:
for (j = 0; j < strlen(input); j++) {
if ( input[j] >= '0' && input[j] <= '9')
{
number = input[j] - '0';
/* queue_push_tail(queue, data) */
queue_push_tail(numQueue, number); /* ERROR - FIXED*/
/* rest of code omitted */
}
}
回想一下,ASCII字符本身是无符号整数。您只需要通过减去ASCII '0'
的值来调整每个字符的值。如果您需要将字符串中的所有数字收集到一个数字中(例如ac7f9gh3 =&gt; 793
),则只需将未调整的值存储在临时字符串中,然后调用atoi (temp)
。