在C90中格式化输入(删除前导零和小数点)? #包括 intVal(intx) { 如果(x

在C90中格式化输入(删除前导零和小数点)? #包括 intVal(intx) { 如果(x,c,int,string-formatting,c89,C,Int,String Formatting,C89,我想用这个程序做的是输入一个任意的数字,一次读取一个字符,然后将它格式化为一个int,这样我就可以使用它(不想使用printf格式)。另外,我只允许使用getchar和printf来完成这个任务 样本输入:0001234.5 编辑所需输出:(5) 实际产量:0001234050 我觉得我正处于顿悟的边缘,但我遇到了一个障碍,请帮忙 *编辑我忘了提到我想要的最终结果是将非十进制数字括在括号中,将十进制数字括在括号中(5)有几件事: 首先,您在prev上调用intVal(),这会做各种疯狂的事情

我想用这个程序做的是输入一个任意的数字,一次读取一个字符,然后将它格式化为一个int,这样我就可以使用它(不想使用printf格式)。另外,我只允许使用getchar和printf来完成这个任务

样本输入:0001234.5
编辑所需输出:(5) 实际产量:0001234050

我觉得我正处于顿悟的边缘,但我遇到了一个障碍,请帮忙

*编辑我忘了提到我想要的最终结果是将非十进制数字括在括号中,将十进制数字括在括号中(5)

有几件事:

  • 首先,您在
    prev
    上调用
    intVal()
    ,这会做各种疯狂的事情
  • 您没有对
    的处理。
  • int
    不能存储带有小数部分的值
  • 每次迭代都要打印出完整的数字
  • 您没有将
    prev
    初始化为
    0
    • 有几件事:

      • 首先,您在
        prev
        上调用
        intVal()
        ,这会做各种疯狂的事情
      • 您没有对
        的处理。
      • int
        不能存储带有小数部分的值
      • 每次迭代都要打印出完整的数字
      • 您没有将
        prev
        初始化为
        0
      尝试一下(无需符号评估和错误处理):

      尝试(无符号评估和错误处理):

      根据您的要求,您的函数intVal完全错误

      如果要从
      0001234.5
      获取
      (5)
      ,最简单的方法是使用
      scanf

      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;
      }
      
      sscanf(“%d.%d”,&a和b);
      printf((%d)\n),a,b);
      
      请参见
      man scanf

      根据您的要求,您的函数intVal完全错误

      如果要从
      0001234.5
      获取
      (5)
      ,最简单的方法是使用
      scanf

      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;
      }
      
      sscanf(“%d.%d”,&a和b);
      printf((%d)\n),a,b);
      

      请参见
      man scanf

      如果所需的输出是1234.5,为什么要使用int来存储输出?如果所需的输出是1234.5,为什么要使用int来存储输出?不仅要改进对“.”的处理,还需要改进其他非数字的处理。仅仅加零是不够的,还要避免该字符乘以10和/或放弃错误投诉。不仅“.”的处理需要改进,其他非数字的处理也需要改进。仅仅加零是不够的,还要避免该字符乘以10和/或放弃错误投诉。如果(op)和op/=10做什么?他们建议你应该更仔细地阅读课本。如果(op)和op/=10做什么?他们建议你应该更仔细地阅读课本。
      sscanf("%d.%d", &a, &b);
      printf("<%d>(%d)\n", a, b);