Сохранение строки как целого числа в структуре. С
Я пытаюсь прочитать строки из файла и преобразовать их в целые числа для хранения в структуре. Функция 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 ответа
Как только ваша строка была преобразована в int
или любой другой числовой тип, все его ведущие нули исчезли, потому что они не изменяют значение целого числа.
Вы можете добавить начальные нули, чтобы все числа имели одинаковое количество цифр, но для совпадения с точным числом начальных нулей в файле потребуется дополнительное пространство.
Вот как вы можете отформатировать все ваши целые числа в две цифры, с нулями, если необходимо:
printf("Age: %02i\n", rec[count].age);
Примечание. В вашей программе несколько ошибок. Вам нужно исправить их, прежде чем он начнет работать должным образом.
- Вы заявляете
age
а такжеref
в качестве указателей, но вы используете их как скалярные переменные - Вы выделяете память для
age
а такжеref
с помощьюmalloc
, а затем вы переопределите его с числовым значением - Вы игнорируете новое значение
ptr
после прочтения. Вы должны использовать это, чтобы видеть, было ли что-нибудь прочитано из файла.
Компилятор должен выдать несколько предупреждений, связанных с проблемами, описанными выше. Рекомендуется рассматривать все предупреждения компилятора как ошибки, поскольку это помогает вам находить простые проблемы, подобные этим.
Нет, вы не можете держать нули! Они нужны компьютеру - они не растут на деревьях! Нет, серьезно: если вы хотите "сохранить" их long
вам просто нужно добавить 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;
}