1

我正在尝试从文件中读取字符串并将它们转换为整数以存储在结构中。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)){
        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++;
        }
4

2 回答 2

1

一旦你的字符串被转换为一个int或任何其他数字类型,它的所有前导零都消失了,因为它们不会改变整数的值。

您可以添加前导零以使您的数字都具有相同的位数,但匹配文件中前导零的确切数量将需要额外的存储空间。

以下是如何将所有整数格式化为两位数,必要时使用零填充:

printf("Age:   %02i\n", rec[count].age);

注意:您的程序有多个错误。您需要在它开始正常工作之前修复它们。

  • 您将ageand声明ref为指针,但您将它们用作标量变量
  • 您将内存分配给ageref使用malloc,然后用数值覆盖它
  • ptr您忽略读取后的新值。您应该使用它来查看是否从文件中读取了任何内容。

编译器必须已发出与上述问题相关的多个警告。将所有编译器警告都视为错误是一个好主意,因为它可以帮助您找到像这样的简单问题。

于 2014-12-11T18:58:27.523 回答
0

不,你不能保持零!计算机需要它们——它们不是长在树上的!不认真:如果你想“保留”它们long,你只需要0在打印的文件写入字符串的前面附加 s 。

您可以在其中小数点后的单位字段上使用printf("%013.6f\n", a);where%0表示“附加零”。136

#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;
}
于 2014-12-11T18:56:31.840 回答