Ввод/вывод двумерного массива с использованием указателей и выделения памяти - C (СИ)
Формулировка задачи:
Доброго времени суток. Такая проблема. Нужно написать программу с использованием функций для ввода/вывода двумерного массива с использованием указателей и выделения памяти(массив должен состоять из чисел с плавающей точкой).
Выводит только нули. Помогите пожалуйста найти ошибку.
#include <stdio.h>
#include <conio.h>
void vvod(int n, double **a)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("a[%d][%d]= ", i,j);
scanf("%f", &a[i][j]);
}
}
void vivod(int n, double **a)
{
int i,j;
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%.2f \t ",a[i][j]);
}
}
void main()
{
int i,j,n;
double **A;
clrscr();
printf("vvedite n \n");
scanf("%d",&n);
A=new double *[n];
for(i=0; i<n;i++)
{
A[i]=new double[n];
}
vvod(n,A);
vivod(n,A);
for(i=0;i<n;i++)
delete [] A[i];
delete [] A;
getch();
}Решение задачи: «Ввод/вывод двумерного массива с использованием указателей и выделения памяти»
textual
Листинг программы
/*Кто в C использует new и delete мил человек!!!*/
#include <stdio.h>
#include <stdlib.h>
void vvod(int n, double **a)
{
int i,j;
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
{
printf("a[%d][%d]= ", i,j);
scanf("%lf", &a[i][j]);
}
}
}
void vivod(int n, double **a)
{
int i,j;
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++) printf("%.2f \t ",a[i][j]);
}
}
int main()
{
double **A;
int i,j,n;
printf("vvedite n \n");
scanf("%d",&n);
A = (double**) malloc(n * sizeof(double*)); //new и delete в C не используются !!!
for(i = 0; i < n; i++)
A[i] = (double*) malloc(n * sizeof(double));
vvod(n,A);
vivod(n,A);
for(i=0;i<n;i++) free(A[i]);
free(A);
return 0;
}
Объяснение кода листинга программы
- Ввод количества строк n
- Выделение памяти под указатель на double с помощью malloc
- В цикле для каждой строки выделение памяти под double с помощью malloc
- Вывод сообщения и ввод double с помощью scanf
- Вывод значения double с помощью printf
- Освобождение памяти выделенной под double с помощью free
- Освобождение памяти выделенной под указатель на double с помощью free
- Возврат значения 0, что означает успешный конец работы программы