Неправильная работа с указателями на массивы - C (СИ)
Формулировка задачи:
ДД!
Написал такой вот код, компилится нормально, но при выводе результатов в консоль видно, что в первых элементах просто нули, хотя должны быть данные, которые теперь значатся во вторых элементах массивов, т.е. сдвиг на одну позицию. Как это побороть?
Вот входной файл:
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)
#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; }
Решение задачи: «Неправильная работа с указателями на массивы»
textual
Листинг программы
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++; }
Объяснение кода листинга программы
В данном коде происходит считывание данных из файла и их вывод на экран.
- Объявлены три массива: ptr, a, b, которые будут хранить считанные данные.
- Инициализирована переменная j = 0, которая будет использоваться как счетчик для считывания данных.
- В цикле while с условием !feof(ffile) происходит считывание данных из файла до тех пор, пока файл не будет считаться пустым.
- Внутри цикла проверяется значение переменной j. Если оно равно 0, то выполняется определенный блок кода, если больше 0, то выполняется другой блок кода.
- В блоке кода для j=0 выполняется инициализация указателя ptr[0] и считывание данных по этому указателю, а также считывание данных в массив a и b.
- В блоке кода для j>0 выполняется считывание данных по указателю ptr[j], а также их вывод на экран вместе с значениями из массива a и b.
- После каждой итерации цикла переменная j увеличивается на 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д