[英]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);
注意:您的程序有多個錯誤。 您需要先修復它們,然后才能正常工作。
age
和ref
聲明為指針,但像標量變量一樣使用它們 malloc
將內存分配給age
和ref
,然后使用數字值覆蓋它 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.