2012-12-18 41 views
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); 
    } 

} 
+0

您认为如何管理5〜9位数字? – effeffe

回答

2

2的问题是modfied程序

#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

+0

这适用于整数'1-4',但是'5-9'它给了我符号我假设ASCII值 – Yamaha32088

+0

@Yamaha32088 - 你想为5,6做什么等等。即如果输入是'567' - 你想要输出什么? – user93353

+0

我将存储每个整数乘以一个数组,所以'5> 10 6> 12 7> 14'这就是为什么在最初的例子中,我通过循环每次迭代后开始一个新行,所以我可以看到更新值 – Yamaha32088

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; 
} 
+0

我不认为这会起作用。 'atoi'接受一个char *(不是char)。我不认为它会编译没有警告。 –

+0

@MarkWilkins我知道,我正在寻找替代方案。 – squiguy

+0

运行时给了我警告和崩溃 – Yamaha32088

1

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

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

这将适用于字符0-4。从我读的数字5-9的期望什么是不清楚。在你的程序

1)

scanf("%s", numbers); 

2)

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

这里