宿題としてやるべきプログラムがあります。プログラムは簡単です。ユーザーが入力した数字を逆にして、while ループを使用して出力するように求めます。ユーザーがゼロから始まる数字を入力すると、問題が発生します。
例えば:
Enter the number: 0089
The reversed number is : 9800
これが出力のあり方です。代わりに、答えとして「98」を取得します。
事前に感謝します。
他人の宿題をするように頼まれたとき、私はそれをするための鈍くてコンパクトな方法を考案するのが好きです.
void reverseNumber(void)
{
char c;
((c=getchar()) == '\n')? 0 : reverseNumber(), putchar(c);
}
0089 入力を数値として読み取るのではなく、文字配列として読み取ります。この方法では、ゼロは削除されません。
数値を文字列として読み取ります。
次に、atoi()
(stdlib.h) を使用して、文字列の場合に整数を作成します。
/* int atoi (const char *) */
これは、質問が必要とするものを正確に作成する作業コードです。
// input: 0321
// output: 1230
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[80] = {0}, temp_str[80] = {0};
int num, i, length = 0, temp_length = 0;
printf("Enter a reversed number (e.g. 0089): ");
scanf("%s", str);
length = strlen(str);
temp_length = length;
printf("string_length: %d\n", length);
for ( i = 0; i < length; i++ ) {
temp_str[i] = str[temp_length - 1];
/* The string length is 4 but arrays are [0][1][2][3] (you see?),
so we need to decrement `temp_length` (minus 1) */
temp_length--;
}
printf("temp_str: %s\n", temp_str);
num = atoi(temp_str);
printf("num: %d\n", num);
return 0;
}