将字符串中的字符转换为整数以进行乘法运算

时间:2012-12-18 00:28:17

标签: c

我无法让这个工作。我想要做的是获取用户输入示例1 2 3然后将每个字符多个2,因此输出将为2 4 6。最终,我将取一长串数字并将字符串中的每个其他字符乘以2,其余部分保持不变。

我现在遇到的问题是我认为它将ASCII值乘以2而不是实际整数乘以2.下面是我到目前为止的代码我还没有添加任何错误检查但还没确定用户只输入数字而不超过16等。我是C语言编程的新手,我只是这样做是为了学习。

#include <stdio.h>


int main(void){


char numbers[17];
int i;
    printf("Please enter number\n");
    scanf("%s", &numbers);

    for(int i=0;i<strlen(numbers);i++){
        printf("%c\n",numbers[i] * 2);
    }

}

3 个答案:

答案 0 :(得分:2)

程序中的2个问题

1)

scanf("%s", numbers);

2)

printf("%d\n",(numbers[i] - '0') * 2);

这是一个修改过的程序

#include <stdio.h>
#include <string.h>

int main()
{
    char numbers[17];
    int i, len;
    printf("Please enter number\n");
    scanf("%s", numbers);

    len = strlen(numbers);

    for(int i=0;i<len;i++)
    {
        printf("%d\n",(numbers[i] - '0') * 2);
    }

}

此外,最好避免scanf - http://c-faq.com/stdio/scanfprobs.html

答案 1 :(得分:1)

尝试使用atoi这样的功能:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){


char numbers[17];
int i;
    printf("Please enter number\n");
    scanf("%s", numbers);

    for(i=0;i<strlen(numbers);i++){
        printf("%c\n", atoi(numbers[i]) * 2);
    }
    return 0;
}

答案 2 :(得分:1)

以下之类的东西可能就是你所追求的。它假定numbers[i]包含一个ASCII数字,将其转换为相应的整数(通过减去ASCII值为零),乘以2,然后将ASCII零值添加到该结果。

printf( "%c\n", ( numbers[i] - '0' ) * 2 + '0' );

这适用于0到4的字符。我从OP中读取数字5-9所需的内容并不清楚。