1

我无法让这个工作。我想要做的是获取用户输入示例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);
    }

}
4

3 回答 3

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

于 2012-12-18T00:35:08.747 回答
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;
}
于 2012-12-18T00:30:15.147 回答
1

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

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

这将适用于字符 0-4。从我对 OP 的阅读中不清楚数字 5-9 需要什么。

于 2012-12-18T00:30:59.663 回答