30/09/2018, 21:07

Chèn số. M.n giúp tớ với

tại sao mảng a cố định độ rộng n rồi mà khi tăng n lên 1 mảng a lại tăng lên 1 nhỉ.
Ví dụ: mảng a có 5 phần tử, ta nhập cả 5 phần tử rồi. Khi chèn 1 số vào vị trí k của mảng a thì mảng a tăng lên 6 phần tử nhưng mảng a chỉ có 5 ô nhớ thì sao lưu được số chèn nhỉ? m.n giúp tớ vs?

‪#‎include‬<conio.h>
#include<stdio.h>
void ChenX (int a[], int &n, int X, int vitri)
{
for (int i = n; i > vitri ; i--)
a[i] = a[i-1] ;
a[vitri] = X;
n++;
}
int main()
{
int n;
printf(" nhap vao do rong cua mang n = ");
scanf("%d", &n);
int a[n], X, vitri;
for (int i = 0; i < n; ++i)
scanf("%d", &a[i]);
scanf("%d%d", &X, &vitri);
ChenX ( a, n, X, vitri);
for (int k=0; k < n; ++k)
printf("	 %d", a[k]);
return 0;
}
viết 23:15 ngày 30/09/2018

int a[n]

Bạn tránh dùng kiểu này, nếu biên dịch với C99 (hỗ trợ variables length arrays) thì vẫn được, nhưng chương trình khi chạy sẽ crash vì khi chèn vào sẽ truy cập ô nhớ không thuộc mảng a, còn với các chuẩn C khác sẽ báo lỗi. Nên là:

int a[10]; hoặc int a[20]; ....

C chuẩn quy định kích thước của mảng phải được biết ngay tại thời điểm biên dịch chứ không phải tại thời điểm chương trình chạy.
Còn nếu bạn muốn quản lý chính xác tới từng ô nhớ của mảng với n nhập vào thì dùng cấp phát động với các hàm malloc() trong main và realloc().

Tuyết Liên Hoa viết 23:17 ngày 30/09/2018

tks bạn nhé:slight_smile:!!!

Bài liên quan
0