0

Доброго времени суток.

Имею файл, который представлен в виде таблицы. Мне необходимо считывать эту таблицу из 3-ёх колонок и записывать считанные данные в массивы (А именно - вытащить N, t начальное, t конечное, U, Up1, Up2 и данные из таблицы для массивов).

Казалось бы, всё тривиально. Сам файл представляет из себя следующее: введите сюда описание изображения

А вот так я пытаюсь получать через fscanf данные.

int main(void) {
    double tn, tk, U, Up1, Up2; // Данные, которые надо вытащить из файла
    FILE *f = fopen("Arrays.txt", "r");
//Подсчет кол-ва точек N
int N = 0;
char Sbuf[100];
fgets(Sbuf, 100, f);
fscanf(f, "%d", &N);
printf("%d\n", N); // Вывод: 21

// tнач, tкон, U
fgets(Sbuf, 100, f);
fgets(Sbuf, 100, f);
fscanf(f, "%f%f%f\n", &tn, &tk, &U); // Получаю 0

fgets(Sbuf, 100, f);
fgets(Sbuf, 100, f);
fscanf(f, "%f%f", &Up1, &Up2);  // Аналогично
fgets(Sbuf, 100, f);

// Заполнение массивов 
double t[N], Uvx[N], Uvix[N]; 
fgets(Sbuf, 100, f);
fgets(Sbuf, 100, f);
int buf;
for (int i = 0; i < N; i++)
    fscanf(f, "%d%f%f%f", &buf, &t[i], &Uvx[i], &Uvix[i]);

return 0;

}

В общем, у меня не считываются значения, которые я вытаскиваю fscanf(f, "%f%f%f\n", &tn, &tk, &U);. А проблема как раз таки в том, что fscanf не читает значения, которые идут в одну линию.

Что же я делаю не так?

SlandShow
  • 997
  • 1
    Забыли & при вызове fscanf? fscanf(f, "%f%f%f\n", &tn, &tk, &U) – iksuy Jun 05 '18 at 16:05
  • Прошу меня простить, но это опечатка

    Всё равно там 0 выходит при считывании

    – SlandShow Jun 05 '18 at 16:11
  • fgets'ы берут из потока пустые строки оставшиеся после scanf'а, а не проматывают следующую строку... ЗЫ: тесктовые данные лучше приводить текстом, а не сриншотами... – Fat-Zer Jun 05 '18 at 17:01
  • @Fat-Zer просто не было другой возможности привести текстовый файл именно текстом. – SlandShow Jun 05 '18 at 17:33
  • @Fat-Zer а как же тогда лучше их проматывать? – SlandShow Jun 05 '18 at 17:34
  • По-моему, у вас эта проблема: https://ru.stackoverflow.com/questions/834447/%D0%A1%D0%B1%D1%80%D0%BE%D1%81-%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B0-%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0-%D1%87%D0%B8%D1%82%D0%B0%D0%B5%D1%82-%D0%BB%D0%B8%D1%88%D0%BD%D1%8E%D1%8E-%D0%BF%D1%83%D1%81%D1%82%D1%83%D1%8E-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83 Гарантии дать не могу, но проверьте. – Harry Jun 05 '18 at 18:26
  • @Harry какой же это дубликат? И кстати в том вопросе так и нету однозначного ответа – SlandShow Jun 05 '18 at 18:33
  • Нормальная тема, прикручивать к совершенно разным вещам вопрос, который ты задавал сам и ради ачивок ещё и дубликаты ставить – SlandShow Jun 05 '18 at 18:42
  • @SlandShow, тот вопрос и оформлен ради того, чтобы на него ссылаться дубликатами, а не копипастить/писать заново одно и тоже т.к. подобные вопросы всплывают каждый месяц у неофитов... что-то смущает, в способах приведённых по ссылке? или не видишь, почему именно та проблема идентична твоей?.. По поводу текста/скриншота — тоже не понятно в чём проблема... разве что клавиши Ctrl и С съел кот... – Fat-Zer Jun 05 '18 at 18:56
  • @Fat-Zer Проблему я уже смог решить. И совсем не так, как по ссылке. А по поводу скриншота - ну да, можно было текстом. – SlandShow Jun 05 '18 at 19:10
  • Архитектура чтения файла некуда не годиться, привыкайте читать его в цикле, в ином случае при минимально изменении формата файла, это перестанет работать. Далее анализировать начало строки, в вашем случае, если число, то кормом прочитанных буфер scanf'у. – NewView Jun 05 '18 at 21:39
  • @SlandShow, если смогли решить, может быть стоит и ответ написать? К тому же, не помешало бы все-таки заменить картинку текстом. – eanmos Jun 06 '18 at 10:38

0 Answers0