60日間全力プログラミング

プログラミング初心者が二ヶ月間でどこまでいけるかを記録したプログラミング学習ブログ

R64 0,30 動作しない

考察
これは問題から何がやりたいのかイメージできない。
 
問題
(1)処理概要
  数字(最大9桁)を入力し、3桁ごとにカンマを挿入し表示する。編集を行う関数名を
  henshuとする。
 
(2)表示例
 
   数字(最大9桁)を入力してください------->-1234
   編集された数字------------------------>-1,234
 
 
(3)考え方 (-1234を入力したときの例)
 
   ①-1234<0なので正の数1234を求める。
   ②数字を10で割って行き、余りを順次文字列に格納する。
    3桁ごとにカンマを挿入する。
    1234÷10=123 余り 4、 4を文字列(0)へ。文字列は「4」
    123 ÷10=12  余り 3、 3を文字列(1)へ。〃「43」
    12  ÷10=1   余り 2、 2を文字列(2)へ。〃「432」
    3桁格納したので          ,を文字列(3)へ。〃「432,」
    1   ÷10=0   余り 1、 1を文字列(4)へ。〃「432,1」
   ③商が0になったので符号(マイナス) -を文字列(5)へ。〃「432,1-」
   ④最後に文字の終わりを表す      \0を文字列(6)へ。〃「432,1-\0」
   ④文字列は[432,1-\0]となっているので
    これを逆に変換[-1,234\0]とする。
    ※最後に文字列の最後を表す'\0'を挿入する。 
 
 
(4)メイン処理
 
  ①数字(suuji)を入力する。
  ②編集関数(henshu)を実行する。
   ・編集関数にて数字(suuji)の3桁ごとにカンマを挿入し、文字(moji)に格納して
    受け取る。
   ・文字(moji)は'\0'を含めて13文字とする。
   ・引数は数字(suuji)を値渡し、文字(moji)をアドレス渡しとする。
henshu(suuji,moji);
  ③編集された文字を表示する。
 
(5)編集関数 「 void henshu(int suuji, char *moji) 」
 
  ①受け取った数字(suuji)が0以上ならそのまま数字0(suuji0)へ、
   suuji0 = suuji;
   0未満(マイナス)ならプラスにして数字0(suuji0)に格納する。
   suuji0 = 0 - suuji; 
  ②カウンタiが13未満で、数字0(suuji0)が0でない間は、次の③~⑥を繰り返す。
   このとき初期値としてi=0,j=0とし、それぞれ繰り返すごとに+1する。
for (i=0,j=0;i<13 suuji0="" 0="" i="" j="" div="">
   (注)iは数字の右側からの桁数(カウンタ)、jは文字列の左側からの添え字。
 
  ④数字0を10で割り、商を数字0(suuji0)へ、余りを数字1(suuji1)へ格納する。
suuji1 = suuji0 % 10;
suuji0 = suuji0 / 10;
  ⑤数字1(suuji1)を文字に変換し文字列(mojiretu)へ格納する。
char suuji_t="0123456789";       → 宣言文
char mojiretu[13]=" ";    → 宣言文
mojiretu[j] = suuji_t[suuji1]; → 数字を文字に変換
  ⑥数字0(suuji0)が0でないときは、3桁ごと「(i+1)%3==0」に
   添え字jを+1し、カンマを文字列へ格納する。
if((i+1)%3 == 0 && suuji0 != 0{
j++;
mojiretu[j]=',';
}
  ⑦数字(suuji)がマイナスのときはマイナス符号を文字列へ格納する。
if(suuji < 0){
mojiretu[j] = '-';
j++;
}
  ⑧文字列(mojiretu)の最後に'\0'を格納する。
mojiretu[j] = '\0';
  ⑨文字列(mojiretu)を最終結果の文字(moji)に変換する。
   このときmojiretuの添え字をiとしmojiの添え字をkとする。
 
    文字列(mojiretu)     文字(moji)
    432,1-\0  →   -1,234\0
 
k = j - 1;
for (i = 0 ; mojiretu[i] != '\0' ; i++){
j = k - i;
*(moji+j) = mojiretu[i];
}
*(moji+i)='\0';
 
動作しない
#include


int main()
{
   
int suuji, henshu;
   
char moji[13];
    printf(
"数字(最大9)を入力してください。");
    scanf(
"%d", &suuji);
    henshu(suuji, moji);
   
    printf(
"編集された数字  %s\n", moji);
 
   
return 0;
}

void henshu(int suuji, char *moji)
{
   
int i,j,k,suuji0,suuji1;
   
char suuji_t = "0123456789";
   
char mojiretu[13] = "             ";
   
   
if (suuji<0)
    {
        suuji0 =
0 - suuji;
    }
   
else
    {
        suuji0 = suuji;
    }
   
   
for (i=0, j=0; i<13 && suuji0 !=0; i++,j++)
    {
        suuji1 = suuji0 %
10;
        suuji0 = suuji /
10;
        mojiretu[j] = suuji_t[suuji1];
       
if ((i+1)%3 == 0 && suuji0 !=0)
        {
            j++;
            mojiretu[j] =
',';
        }
    }
   
   
if (suuji<0)
    {
        mojiretu[j] =
'-';
        j++;
    }
    mojiretu[j] =
'\0';
    k = j -
1;
   
for (i=0; mojiretu[i] !='\0'; i++) {
        j = k - i;
        *(moji+j) = mojiretu[i];
    }
    *(moji+i)=
'\0';
}