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;
 }

该代码仅在假设所有操作数都是一位数字时被暗示。我如何为多个数字/浮点数隐含它?我应该采取什么方法来解决这个问题。

我没有教练可以咨询(自学和第 7 章),我被困在这几个小时。所以任何帮助都将不胜感激。

谢谢你

注意

有人提到了 atoi() ...但我正在寻找其他东西/手册

4

2 回答 2

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';

保证字符'0''9'C 中具有顺序值。

于 2012-09-30T16:01:38.480 回答
2

如果您在“C”中工作,要将“数字”的文本表示形式转换为实际数字 - 无论长度如何 - 使用 atoi() 之类的东西。仅转换一个字符时可能出现的“快捷方式”不可扩展或推广,最终必须删除。另一方面,使用 atoi() 之类的东西,您可以从单字符数字移动到多字符数字,而无需更改任何代码。

atoi() 系统库代码已经存在了几十年,并且完全处理所有边缘情况(负零有人吗?);尝试自己滚动需要付出巨大的努力才能产生同样清晰的结果。

于 2012-10-01T03:30:23.580 回答