2014-03-20 2 views
0

Читаю файл в C, отформатированный как этотЧтение файла в C с входом с различными типами данных

int int int int char double double 

но повторил известное число раз. (Первая строка файла, не указанная в образце, указывает количество повторений этой последовательности). Я хочу проанализировать эти значения в структуре. Тем не менее, я не уверен, как читать эти элементы, поскольку у них разные типы данных, . Я смотрел три разных метода.

fread -> не работает, потому что разные элементы имеют разные типы данных и не имеют одинаковых количество байтов.

fscanf -> не работает из-за множества различных типов данных

fgets -> не работает Becase он останавливается только один раз есть символ новой строки.

Так что я не уверен, что с этим делать. Может быть, мне сложно найти элегантное решение для загрузки файла с уродливым входом вроде этого, или, может быть, я упускаю из виду что-то в одной из функций, о которых я уже говорил.

Это для школьного проекта, но я не прошу ответа, просто намек.

Я ограничен тем, что я могу использовать в библиотеках stdio и stdlib.

спасибо за помощь

+0

Я думаю, что стандартный способ - использовать 'fgets' и читать каждую строку в локальном массиве' char', а затем использовать 'sscanf' для прочитайте отдельные части. – merlin2011

+0

Спасибо, merlin, я думаю, что метод fscanf с несколькими спецификаторами типов кажется лучшим/самым простым решением. – Liquidmetal

ответ

1

Чтобы уточнить ранее ответы, вам нужно будет что-то вроде :

int intVar1; 
int intVar2; 
int intVar3; 
int intVar4; 
char c; 
double doubleVar1; 
double doubleVar2; 

fscanf(file, "%d %d %d %d %c %lf %lf", 
     &intVar1, 
     &intVar2, 
     &intVar3, 
     &intVar4, 
     &c, 
     &doubleVar1, 
     &doubleVar2); 
1

fscanf должен работать.

fscanf(file, "%d %d %d %d %c %lf %lf", ....); 
+0

Я не понимал, что я смог использовать fscanf таким образом! Я думал, что он может сразу читать только одно и должен быть повторен! Спасибо за вашу помощь!!! – Liquidmetal

+0

Последний вопрос: все ли эти значения будут считаны в массив или каждый получит свою объявленную переменную? – Liquidmetal

+0

@ Liquidmetal Вы можете объявить для них отдельные переменные или прочитать их в структуре или w/e, которую хотите. –

1

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

fscanf(fd,"%d %d %d %d %d %c %lf %lf",&a,&b,&c,&d,&e,%f,&h) 

или вы можете создать структуру

struct data 
{ 
    int a; 
    int b; 
    int c; 
    int d; 
    char e; 
    double h; 
    double i; 
}var1; 

и использовать его в fscanf(), чтобы заполнить значение для ее членов

+0

Спасибо, парень ниже этого указал на то, что я не знал, что могу это сделать. – Liquidmetal

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