Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
айвора
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 51
1

Неправильная работа с указателями на массивы

20.06.2016, 10:08. Просмотров 141. Ответов 2
Метки нет (Все метки)

ДД!

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

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdlib.h>
#include <stdio.h>
 
int N;
int *ptr;
double *a, *b;
 
void print( int *ptr, int n )
{
  int j;
 
  printf("\n%d points:\n", n);
  for (j=0; j<n; j++)
    printf("point %d = (%.2lf;%.2lf)\n", ptr[j], a[j], b[j] );
  printf("\n");
}
 
 
int main( void )
{
  int j=0;
 
  FILE *ffile = fopen("test.txt", "r");
  while (!feof(ffile)){
      if(!j){
          fscanf(ffile, "%d", &N);
          a=(double*)malloc(N*sizeof(double));
          b=(double*)malloc(N*sizeof(double));
          ptr=(int*)malloc(N*sizeof(int));
      }
      else{fscanf(ffile, "%d %lf %lf", &ptr[j], &a[j], &b[j]);
        printf("%d %lf %lf\n", ptr[j], a[j], b[j]);
      }j++;
  }
  fclose(ffile);
 
  print(ptr, N);
 
  return 0;
}
Вот входной файл:

5
0 2.1 1.3
1 5.0 2.2
2 1.2 1.2
3 1.8 1.0
4 3.0 2.8

Вот полученный результат:

0 2.100000 1.300000
1 5.000000 2.200000
2 1.200000 1.200000
3 1.800000 1.000000
4 3.000000 2.800000

5 points:
point 10630592 = (0.00;0.00)
point 0 = (2.10;1.30)
point 1 = (5.00;2.20)
point 2 = (1.20;1.20)
point 3 = (1.80;1.00)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2016, 10:08
Ответы с готовыми решениями:

Работа с указателями
#define*_CRT_SECURE_NO_WARNINGS #include*&lt;stdio.h&gt; #include*&lt;malloc.h&gt;...

Неправильная работа if
Привет! Задали по лабараторки сделать программу, обрабатывающию 2 уровнения....

Работа с массивами и указателями
I. Пусть v1 = v2 = 0; v3=1.5; vi= i+1/i2+1*vi-1-vi-2*vi-3 i=4,5,6 Дано...

Неправильная работа putchar()
Доброго дня суток. бида пришла из ниоткуда: в простом, вроде бы, задании,...

Неправильная работа программы
Написал код. Компилируется. Проблема в своенравном поведении программы. Нужная...

2
shvyrevvg
534 / 505 / 257
Регистрация: 12.05.2016
Сообщений: 1,469
20.06.2016, 10:22 2
Вы начинаете писать в массивы начиная с j=1.
Цитата Сообщение от айвора Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
int j = 0;
//...
while (!feof(ffile)) {
    if(!j) {
    //...
    }
    else { //  тут у вас j уже равно 1. Как вариант в след писать j-1.
        fscanf(ffile, "%d %lf %lf", &ptr[j], &a[j], &b[j]);
        printf("%d %lf %lf\n", ptr[j], a[j], b[j]);
    }
    j++;
}
1
айвора
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 51
20.06.2016, 10:51  [ТС] 3
shvyrevvg, а слона то я и не заметил :-) Спасибо большое!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2016, 10:51

Работа с указателями - поменять числа
Здравствуйте. Пытаюсь разобраться в работе с указателями. Подскажите в чем моя...

Работа с указателями в тестовом файле
изначально была задача:отсортировать файл(текстовый) по значениям Nго столбца....

Работа с указателями - прокомментировать код
у меня такая прозьба объясните пожалуста по подробние что означает каждая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru