2017-02-11 16 views
1

Написание программы, которая считывает информацию из текстового файла и записывает его в двоичный файл. Текстовый файл содержит:
Имя, фамилия, идентификационный номер и ГПД.
Имя и фамилия - это массивы символов с максимальной длиной 255, ID - это неподписанный int, а GPA - это float. После каждой строки есть еще одна строка с теми же 4 частями информации. Как я могу перейти в конец текстового файла и продолжить копирование информации в файл bin? Например, скажем, что есть 4 или 5 строк с разными учениками с новыми идентификационными номерами и GPAs, как я могу продолжить их копирование из текста в двоичные файлы? Я думаю, что у меня есть сегмент внутри цикла, но я не уверен, как реализовать цикл. Мне нужно использовать fscanf для текстового файла и fwrite для двоичного файла. Любая помощь оценивается.Чтение из текстового файла и запись в двоичный файл

unsigned char firstName[255]; 
unsigned char lastName[255]; 
unsigned int id; 
float gpa; 

fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa); //read one line of the text file 
printf("%s %s %d %.1f", firstName, lastName, id, gpa); //print line information ((test)) 

printf("\n"); //newline 

//Writing information to binary file 

fwrite(firstName, strlen(firstName), 1, binfile); 
fwrite(lastName, strlen(lastName), 1, binfile); 
fwrite(&id, sizeof(int), 1, binfile); 
fwrite(&gpa, 4, 1, binfile); 

ответ

1

fscanf -. «В случае успеха функция возвращает количество элементов, успешно считанной Этот счетчик может соответствовать ожидаемому числу отсчетов или менее -Дажа нуль- в случае сбоя согласования В случае. от отказа ввода до того, как любые данные могут быть успешно прочитаны, возвращается EOF ».

Таким образом, вы можете проверить, чтобы увидеть, если это == EOF в то время как петля

while(fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa) != EOF) { 
    //Body 
} 

В качестве альтернативы вы можете также использовать feof(stdin)

while(1){ 
     fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa); 
     if (feof(textfile)) 
       break; 
     //Body 
} 

(PS: Если вы не хотите пусть файл прочитает < 4 количество записей и остановится прямо там, вы можете сделать это, заменив EOF на 4 как количество возвратов fscanf)

+0

Отлично, спасибо. –

+0

@minigeek Рассмотрите [это «жадный» вопрос .. upvote ...] (http://meta.stackoverflow.com/a/298583/2410359) – chux

+0

Извините @chux больше не будет этого делать .. Смешная вещь это тот вопрос, о котором вы говорили, получил слишком много голосов. – minigeek

 Смежные вопросы

  • Нет связанных вопросов^_^