#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;
}
我想用这个程序做的是输入一个任意数字,一次读取一个char,然后将其格式化为int,以便我可以使用它(不想使用printf格式化)另外,我只允许使用getchar和printf进行此分配。
样本输入:0001234.5
编辑所需输出:&lt; 1234&gt;(5)
实际产出:0001234050
我觉得我正处于一种顿悟的尖端,但我遇到了障碍,请帮忙吗?
*编辑我忘了提到我要使用的END结果是将&lt; 1234&gt;中包含的非十进制数字包含在内。括号(5)中的十进制数字
答案 0 :(得分:3)
一些事情:
intVal()
上拨打prev
,这将会做各种疯狂的事情。'.'
。int
无法存储带小数部分的值。prev
初始化为0
。答案 1 :(得分: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;
}
答案 2 :(得分:0)
根据您的要求,您的函数 intVal 完全错误。
如果您想从<1234>(5)
获取0001234.5
,最简单的方法是使用scanf
:
sscanf("%d.%d", &a, &b);
printf("<%d>(%d)\n", a, b);
请参阅man scanf