将字符串保存为结构中的整数。C

将字符串保存为结构中的整数。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)){

我试图从文件中读取字符串,并将其转换为整数以存储在结构中。函数的作用很好,但会从标记的开头删除任何0。我有什么办法可以保存它们吗?输入文件的格式如下例所示

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