将字符串保存为结构中的整数。C
我试图从文件中读取字符串,并将其转换为整数以存储在结构中。函数的作用很好,但会从标记的开头删除任何0。我有什么办法可以保存它们吗?输入文件的格式如下例所示将字符串保存为结构中的整数。C,c,strtol,C,Strtol,我试图从文件中读取字符串,并将其转换为整数以存储在结构中。函数的作用很好,但会从标记的开头删除任何0。我有什么办法可以保存它们吗?输入文件的格式如下例所示 003345.755653 000046.003265 073532.003434 122280.065431 输入文件^^^ struct store{ int *age; int *ref; }rec[20]; char *token; char*ptr; while (!feof (filea)){
003345.755653
000046.003265
073532.003434
122280.065431
输入文件^^^
struct store{
int *age;
int *ref;
}rec[20];
char *token;
char*ptr;
while (!feof (filea)){
fgets(buffer, sizeof buffer, filea);
token = strtok(buffer, ".");
rec[count].age = malloc(10);
rec[count].age = strtol(token, &ptr, 10);
printf("Age: %i\n", rec[count].age);
token = strtok(NULL, ".");
rec[count].ref = malloc(10);
rec[count].ref = strtol(token, &ptr, 10);
printf("Ref: %i\n\n", rec[count].ref);
count++;
}
不,你不能保留零!电脑需要它们——它们不是长在树上的!不严重:如果你想“保持”它们的
长
,你只需在打印的文件写入字符串前面附加0
s即可
您可以使用printf(“%013.6f\n”,a)代码>其中%0
表示在13
单元的字段上“附加零”,其中6
单元位于小数点之后
#include <stdio.h>
int main()
{
float a = 3345.755653;
float b = 46.003265;
float c = 73532.003434;
float d = 122280.065431;
printf("%013.6f\n", a);
printf("%013.6f\n", b);
printf("%013.6f\n", c);
printf("%013.6f\n", d);
return 0;
}
#包括
int main()
{
浮点数a=3345.755653;
浮点数b=46.003265;
浮点数c=73532.003434;
浮点数d=122280.065431;
printf(“%013.6f\n”,a);
printf(“%013.6f\n”,b);
printf(“%013.6f\n”,c);
printf(“%013.6f\n”,d);
返回0;
}
一旦字符串被转换为int
或任何其他数字类型,其所有前导零都将消失,因为它们不会更改整数的值
您可以添加回前导零,以使您的数字都具有相同的位数,但匹配文件中前导零的确切数目需要额外的存储空间
以下是如何将所有整数格式化为两位数,必要时使用零填充:
printf("Age: %02i\n", rec[count].age);
注意:您的程序有多个错误。在它开始正常工作之前,您需要修复它们
- 将
age
和ref
声明为指针,但将它们用作标量变量
- 使用
malloc
将内存分配给age
和ref
,然后用一个数值覆盖它
- 读取后忽略新值
ptr
。您应该使用它来查看是否从文件中读取了任何内容
编译器必须发出与上述问题相关的多个警告。将所有编译器警告视为错误是一个好主意,因为它可以帮助您发现类似于这些的简单问题。在调试器中逐步检查代码;它没有做你认为它在做的事情。文件中的
是什么意思?它是十进制分隔符吗?如果是这样的话,你打算用两个整数来存储一个十进制数吗?我不知道ref
是什么意思,但数据文件中age
和ref
字段之间的
让我对我们是否真的在处理整数感到困惑。如果OP试图使用两个整数来存储一个十进制值,那么事情就会复杂得多。从另一个角度看,任何小于该类型最大值1/2的数字都有前导零。以数字7为短,例如:000000000000011
二进制,或0007
hex。当我们表示一个数字时,我们通常不写前导零,但您可以随时根据需要预写任意数量的前导零。确定您不想要printf(“%013.4f\n”
?)(并且float
可能太不精确,建议double
或long double
)@chux谢谢你的提示!我的float d
导致了122280.062500
,但是double d
-->122280.065431
。