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
编辑期望输出:<1234>(5) 实际输出:0001234050

我觉得我正处于顿悟的风口浪尖,但我遇到了障碍,请帮忙?

*编辑我忘了提到我要的 END 结果是将非十进制数括在 <1234> 中,将十进制数括在括号中 (5)

4

3 回答 3

3

一些东西:

  • 首先,您正在调用intVal()prev它会做各种疯狂的事情。
  • 你没有处理'.'.
  • int不能存储带有小数部分的值。
  • 您在每次迭代时打印出整个数字。
  • 您没有初始化prev0.
于 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 回答