簡體   English   中英

將字符串另存為結構體中的整數。 C

[英]Saving a string as an integer in a struct. 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)){
        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++;
        }

將字符串轉換為int或任何其他數字類型后,其所有的前導零都將消失,因為它們不會更改整數的值。

您可以添加后導零以使所有數字都具有相同的位數,但是要匹配文件中前導零的確切數目,則需要額外的存儲。

這是將所有整數格式化為兩位數字的方法,如有必要,可以使用零填充:

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

注意:您的程序有多個錯誤。 您需要先修復它們,然后才能正常工作。

  • 您將ageref聲明為指針,但像標量變量一樣使用它們
  • 您使用malloc將內存分配給ageref ,然后使用數字值覆蓋它
  • 讀取后,您將忽略ptr的新值。 您應該使用它來查看是否已從文件中讀取任何內容。

編譯器必須發出與上述問題有關的多個警告。 將所有編譯器警告均視為錯誤是一個好主意,因為它可以幫助您找到諸如此類的簡單問題。

不,你不能保持零! 計算機需要它們-這些不是在樹上生長的! 不用擔心:如果要long 保留它們long您只需要在打印的文件字符串的前面加上0

您可以使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM