我正在尝试完成一个研讨会,但在 if 语句中调用 inputVector 函数后出现段错误。我不知道为什么它会给我一个错误。编译时没有警告,并且对数组进行的测试实际上显示了记录的内容。我正在运行 OSX Maverick,但我也在 Linux 系统上进行了测试,但没有成功。如果有人能阐明这一点,我将非常感激。
#include <stdio.h>
#include "matrix.h"
int main() {
int row = 0 , col = 0, option = 0;
int vector[9], result[9];
int matrix[9][9];
do{
printf("Number of rows (0 to exit) ? ");
scanf("%d", &row);
if(row != 0) {
printf("Number of columns ? ");
scanf("%d", &col);
inputMatrix(row, col, matrix);
printf("Pre (0) or Post (1) Multiply ? ");
scanf("%d", &option);
if(option == 0){
inputVector(row, vector);
printf("TESTING 1");
preMulti(row, col, matrix, vector, result);
printf("TESTING 2");
display(col, result);
}
else if(option == 1){
inputVector(col, vector);
postMulti(row, col, matrix, vector, result);
display(row, result);
}
return 0;
}// END IF
} while( row != 0 );// End While
} // End Main
矩阵.cpp
#include "matrix.h"
#include <stdio.h>
void inputMatrix(int row , int col, int matrix[][MAXCOL]) {
for ( int i = 0; i < row; i++) {
printf("Row %d ? ", i + 1);
for ( int k = 0; k < col; k++)
scanf("%d", &matrix[i][k]);
}
}
void inputVector(int size, int vector[]) {
printf("Vector? ");
for(int i = 0; i < size; i++){
scanf("%d" , &vector[i]);
printf(" Recorded %d \n", vector[i]);
}
printf("TESTING 3");
}
void preMulti(int row, int col, int matrix[][MAXCOL], int vector[], int result[]) {
for(int i = 0; i < col; i++ ) {
result[i] = 0;
for( int k = 0; k < row; i++)
result[i] += vector[k] * matrix[k][i];
}
}
void postMulti(int row, int col, int matrix[][MAXCOL], int vector[], int result[]) {
for( int i = 0; i < row; i++ ) {
result[i] = 0;
for( int k = 0; k < col; i++)
result[i] += vector[k] * matrix[i][k];
}
}
void display(int size, int vector[]) {
printf("Result: ");
for ( int i = 0; i < size; i++)
printf("%d ", vector[i]);
}
最佳答案
这是您的问题(至少是导致段错误的问题),这种情况发生在多个地方,preMulti()
和 postMulti()
:
for( int k = 0; k < row; i++)
最后应该是 k++
,而不是 i++
。
关于c - scanf 将数组传递给函数后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749316/