Неправильная работа с указателями на массивы - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д