0
#include <stdio.h>

int intVal(int x)
{
    if(x < '0' || x > '9'){
        return 0;
    }
    else{
        x = x - '0';
        return x;
    }
}

int main(void)
{
    int c, num, prev;

    while((c = getchar()) != EOF){
        num = (intVal(prev) * 10) + intVal(c);
        prev = num;
        printf("%d", num);
    }
    return 0;
}

このプログラムでやりたいことは、任意の数値を入力して一度に文字を読み取ってから、それを使用できるように int にフォーマットすることです (printf フォーマットを使用したくない) また、私はこの割り当てには getchar と printf を使用できます。

サンプル入力: 0001234.5
edit望ましい出力: <1234>(5) 実際の出力: 0001234050

ひらめきの先端にいるような気がしますが、障害物にぶつかりました。助けてください。

*編集 目的の END 結果は、非 10 進数を <1234> で囲み、10 進数を角かっこ (5) で囲むことです。

4

3 に答える 3

3

いくつかのこと:

  • まず、あらゆる種類のクレイジーなことを行う をintVal()呼び出します。prev
  • の取り扱いはありません'.'
  • 小数部のintある値は格納できません。
  • 反復ごとに数値全体を出力しています。
  • prevに初期化していません0
于 2011-02-02T21:02:46.673 に答える
0

試してみてください(符号の評価とエラー処理なしで):

int main(void)
{
    double x=0,op=0;
    int c;

    while((c = getchar()) != EOF && c!='\n')
      if( c=='.' )
        op++;
      else
      if( op )
        x += (op/=10) * intVal(c);
      else
        x = x*10 + intVal(c);

    printf("%f",x);
    return 0;
}
于 2011-02-02T21:43:58.503 に答える
0

関数intValは、要件によると完全に間違っています。

<1234>(5)から取得したい場合0001234.5、最も簡単な方法は次を使用することscanfです。

sscanf("%d.%d", &a, &b);
printf("<%d>(%d)\n", a, b);

見るman scanf

于 2011-03-26T02:04:38.733 に答える