Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
айвора
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 51
#1

Неправильная работа с указателями на массивы - C (СИ)

20.06.2016, 10:08. Просмотров 128. Ответов 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
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2016, 10:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неправильная работа с указателями на массивы (C (СИ)):

Неправильная работа if - C (СИ)
Привет! Задали по лабараторки сделать программу, обрабатывающию 2 уровнения. Задание: y=f1 если C, в противном случае y=f2 (сами функции...

Работа с массивами и указателями - C (СИ)
I. Пусть v1 = v2 = 0; v3=1.5; vi= i+1/i2+1*vi-1-vi-2*vi-3 i=4,5,6 Дано натуральное n (n&gt;=4). Найти vn

Неправильная работа putchar() - C (СИ)
Доброго дня суток. бида пришла из ниоткуда: в простом, вроде бы, задании, функция putchar() никак не хочет выводить вводимый символ,...

Не понятна работа цикла for c указателями. - C (СИ)
Помогите разобраться со следующей прогой: #include &lt;stdio.h&gt; void main(){ char s=&quot;Удалить пробелы и табуляции из строки&quot;; ...

Работа с указателями - прокомментировать код - C (СИ)
у меня такая прозьба объясните пожалуста по подробние что означает каждая строчка этой программы: За ранее благодарю... #include...

Работа с указателями - поменять числа - C (СИ)
Здравствуйте. Пытаюсь разобраться в работе с указателями. Подскажите в чем моя ошибка. Вот пример простейшей програмки, в функции...

2
shvyrevvg
495 / 474 / 183
Регистрация: 12.05.2016
Сообщений: 1,371
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
Привет! Вот еще темы с ответами:

Работа с указателями в тестовом файле - C (СИ)
изначально была задача:отсортировать файл(текстовый) по значениям Nго столбца. Я считываю строки и делаю массив указателей b на эти...

Неправильная работа функции времени - C (СИ)
Образовалась такая проблема...весь код работает нормально...но проблема заключается в том, что функция времени работает не...

Неправильная работа getch() в switch - C (СИ)
Добрый день! Пишу &quot;Морской бой&quot; на Си. Столкнулся с проблемой, связанной с функцией getch(). Привожу код одной из функций: void...

Обнуление переменных (неправильная работа приложения) - C (СИ)
Добрый день, подскажите, почему такое может получаться (компилятор VS2013 pro). Данное приложение зацикливается само в себя и при каждом...


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

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

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