2012-12-18 42 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); 

這裏