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

时间:2014-12-11 18:51:45

标签: c strtol

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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

答案 1 :(得分:0)

不,你不能保留零!电脑需要它们 - 那些不是在树上生长!不认真:如果你想“保持”他们long,你只需要在打印的文件写入字符串前面附加0

printf("%013.6f\n", a); %0表示“{em>追加零”的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; } 之后小数点。

{{1}}