1

これは、この本に従って c でプログラミングを学習しているときに遭遇した問題です。

Enter an expression : 1+2.5*3
Output: 10.5

これが私がこれまでに思いついたものです。 編集

#include<stdio.h>

int main (void)

{
char c;

float f1=0.0f,f2=0.0f;

c = getchar();
while(c != '\n')

{

  if(c!='+' && c!='-' && c!='*' && c!='/')
      {
          if (f1 == 0.0f)
          {
              f1 = c - '0';
              c = getchar();
          }
          else
          {
              f2 = c - '0';
              c = getchar();
          }

      }

 switch (c)
      {
          case '+': c = getchar(); f2 = c - '0' ; f1 = f1+f2; break;
          case '-': c = getchar(); f2 = c - '0' ; f1 = f1-f2; break;
          case '*': c = getchar(); f2 = c - '0' ; f1 = f1*f2; break;
          case '/': c = getchar(); f2 = c - '0' ; f1 = f1/f2; break;
         // case '.':
          default: break;
      }

 c = getchar();

 }
 printf("\n Value of the expression: %.2f", f1);
 return 0;
 }

コードは、すべてのオペランドが 1 桁の数字になることを前提としてのみ実装されています。複数の数字/浮動小数点数を実装するにはどうすればよいですか? この問題を解決するには、どのようなアプローチを取る必要がありますか。

私には相談できるインストラクターがいません(自己学習と第7章で)、これで何時間も立ち往生しています。

ありがとうございました

注意

誰かがatoi()について言及しました...しかし、私は何か他の/マニュアルを探しています

4

2 に答える 2

2

「C」で作業している場合、「数値」のテキスト表現を実際の数値に変換するには、長さに関係なく、atoi() などを使用します。1 文字のみを変換する場合に可能な「ショートカット」は、拡張可能または一般化可能ではないため、最終的には削除する必要があります。一方、atoi() のようなものを使用すると、コードを変更することなく、1 文字の数字から複数文字の数字に移行できます。

atoi() システム ライブラリ コードは何十年も前から存在しており、すべてのエッジ ケースを完全に処理します (マイナス ゼロのユーザーはいますか?)。自分でロールバックしようとすると、同等の鮮明な結果を生成するのに非常に多くの労力がかかります.

于 2012-10-01T03:30:23.580 に答える
2
f2 = c; // this will convert ascii charecter value of c into f2. 
         // How do i convert the character '2' into the digit 2 ?

こちらです:

f2 = c - '0';

文字は、C では連続した値を持つ'0'ことが保証されています。'9'

于 2012-09-30T16:01:38.480 に答える