在C90中格式化输入(删除前导零和小数点)? #包括 intVal(intx) { 如果(x
我想用这个程序做的是输入一个任意的数字,一次读取一个字符,然后将它格式化为一个int,这样我就可以使用它(不想使用printf格式)。另外,我只允许使用getchar和printf来完成这个任务 样本输入:0001234.5在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(),这会做各种疯狂的事情
编辑所需输出:(5) 实际产量:0001234050 我觉得我正处于顿悟的边缘,但我遇到了一个障碍,请帮忙 *编辑我忘了提到我想要的最终结果是将非十进制数字括在括号中,将十进制数字括在括号中(5)有几件事:
- 首先,您在
上调用prev
,这会做各种疯狂的事情intVal()
- 您没有对
的处理。
不能存储带有小数部分的值int
- 每次迭代都要打印出完整的数字
- 您没有将
初始化为prev
0
- 首先,您在
上调用prev
,这会做各种疯狂的事情intVal()
- 您没有对
的处理。
不能存储带有小数部分的值int
- 每次迭代都要打印出完整的数字
- 您没有将
初始化为prev
0
- 有几件事:
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);