2016-12-02 292 views
0

任務是使用scanf("%d")然後用printf("%с")不一樣的atoi標準功能再次打印得到int,itoa。至於我明白我需要把所有的數字再加入\0 char和打印,但是我怎麼可以把它。我想到了分割number%10 + /0number/10以減少1個字符的循環。 因此代碼看起來應該像平滑這個INT轉換爲char

#include <conio.h> 
#include <stdio.h> 

main(void) 
{ 
int number,reserve ; 
char Array[50]; 
scanf_s("%d",&number); 
if (number > 0 || number == 0) 
{ 
    do 
    { 
     reserve = number % 10; 
     printf("%c", reserve + '/0'); 
     number /= 10; 
    } while (number != 0); 
} 
else 
{ 
    number *= -1; 
    printf("-"); 
    do 
    { 
     reserve = number % 10; 
     printf("%c", reserve + '/0'); 
     number /= 10; 
    } while (number != 0); 

} 
_getch(); 
return 0; 

}

同樣可以有負數,所以我需要一些if語句來檢查它是否爲負,並且在情況下,它是循環應該避免它,我們不會得到類似-%10

所以我不知道如果循環是正確的(希望有人會解決它並解釋我應該如何)。等待你的建議。行

number = number % 10; 

+0

循環控制是錯誤的:例如,對於'42'你需要'2'循環不'42'。嘗試'do {...} while(number!= 0);'。並仔細考慮循環內容。請*運行*您的代碼! –

+0

你應該看看[適當的C格式](// prohackr112.tk/r/properties-formatting)。或者學習如何[徹底模糊你的代碼](// prohackr112.tk/r/proper-c-obfuscation)。 –

+0

'itoa'不是一個標準功能 –

回答

1

一個副作用是,你失去的number原始值。所以當你去做

number = number/10; 

它總是會得到零值。要解決此問題,請將原始值存儲在其他位置,或使用另一個變量進行字符轉換(模10,然後加\0)。

此外,您的循環需要重新檢查。這個模過程,加上\0,除法,重複,當除法結果爲零時(即沒有更多的數字要打印)應該停止。另一個需要考慮的問題是:這些數字的印刷順序是什麼?

我會告訴你如何確定int的值是大於還是小於零,因爲你沒有在這段代碼中嘗試。

+0

那麼我固定錯誤,當我變得0(欣賞提示),但現在的問題是顛倒的數字。 – andrewand

+0

要反轉這個順序,你可以在一個緩衝區('char'數組)中建立轉換後的字符串。或者將其向後(高索引到低索引)進行構建並向前打印(例如使用'printf()'或向前構建它,然後以某種方式向後打印(注意填充,但是)。讓我們來看看這些類型的東西,但是我會給你這個想法,並讓你弄清楚代碼。 – e0k

+0

看看我編輯的問題。現在代碼可以處理負數。我知道如何做倒轉,但我堅持保存字符以正確排列(不會所有的數字相加)它會是格拉特,如果你能幫助我這個。 – andrewand

0

這會幫助你,通過你的目的

#include <stdio.h> 

int main() { 

    int a; 
    int i = 0; 
    int str_size = 0; 
    char str[11] = {}; 
    char tmp; 

    scanf("%d", &a); 

    while (a) { 
     str[str_size++] = a % 10 + '0'; 
     a /= 10; 
    } 

    str_size--; 

    while (i < str_size) { // rewind 
     tmp = str[i]; 
     str[i++] = str[str_size]; 
     str[str_size--] = tmp; 
    } 
    printf("%s", str); 

    return 0; 
}