Давайте рассмотрим это поэтапно. Сначала несколько незначительных исправлений для вашего кода:
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
float dummy; /* this will make thing easier later */
fscanf(sample,"%f",&dummy);
matrix[i][j] = dummy;
}
/* fscanf(sample,"\n",&matrix[i][j]); this isn't even legal */
}
Теперь мы определяем, что хотим:
int startrow = 2; /* The starting index. Remember we index 0,1,2,3 */
int startcol = 2;
int resultrows = 2; /* How many rows we want in our answer */
int resultcols = 2;
float result[resultrows][resultcols];
Теперь мы игнорируем то, чего мы не хотим:
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
float dummy;
fscanf(sample,"%f",&dummy);
if(i >= startrow && i < startrow + resultrows &&
j >= startcol && j < startcol + resultcols){
matrix[i][j] = dummy;
}
}
}
Обратите внимание, что теперь только значения, которые мы хотим, копируются в matrix
, а остальные matrix
- неинициализированная тарабарщина. Теперь напишите его на result
:
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
float dummy;
fscanf(sample,"%f",&dummy);
if(i >= startrow && i < startrow + resultrows &&
j >= startcol && j < startcol + resultcols){
result[i-startrow][j-startcol] = dummy;
}
}
}
EDIT: Если вы хотите скопировать подматрицу из более крупной матрицы, уже находящейся в памяти, внутренний цикл должен быть
for(j=0;j<cols;j++){
if(i >= startrow && i < startrow + resultrows &&
j >= startcol && j < startcol + resultcols){
result[i-startrow][j-startcol] = matrix[i][j];
}
}