gpt4 book ai didi

c - 在 C 中读取二维矩阵时检测到错误的大小

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:58 25 4
gpt4 key购买 nike

我在从 C 文件中读取矩阵时遇到一点问题。我的代码首先读取矩阵的大小 N,然后为适当的整数矩阵分配内存并读取要放入其中的元素。

如果输入文件有一个大小合适的矩阵,一切正常。但是,如果少了一个元素,代码将无法完成循环。我尝试了一个测试来检查该元素是否不是 '\n' 或 EOF,但它不起作用。

代码如下:

#include <stdio.h>
#include <stdlib.h>

void trashout();
int ** alocamatrix(int N);
void readmatrix(int **matrix, int N);
void printmatrix(int **matrix, int N);

int main() {

int N, **matrix;

scanf("%d", &N);
printf("N = %d\n", N);
if(N > 20 || N < 1){
printf("ERROR: invalid data\n");
exit (0);
}
trashout();

matrix = alocamatrix(N);

readmatrix(matrix, N);
printmatrix(matrix, N);


return 0;
}

void trashout(){
char trash = 'a';
while (trash != '\n' && trash != EOF){
scanf("%c", &trash);
if(trash == EOF){
printf("ERROR: invalid data\n");
exit (0);
}
}
}

int ** alocamatrix(int N){
int i, **matrix;
matrix = malloc(N * sizeof(int *));
for(i = 0; i < N; i++)
matrix[i] = malloc(N * sizeof(int));

return matrix;
}

void readmatrix(int **matrix, int N){
int i, j;
char garb = 'a';

for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
scanf("%d", &matrix[i][j]);
if(matrix[i][j] == EOF || matrix[i][j] == '\n' ){
printf("Dados inválidos\n");
exit (0);
}
}
trashout(garb);
}

}

void printmatrix(int **matrix, int N){
int i, j;
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}

下面有两个输入文件,06_B 有效,07 无效。

https://drive.google.com/file/d/0ByeiEVRxD2mwRFRlcXkwc0traW8/edit?usp=sharing https://drive.google.com/file/d/0ByeiEVRxD2mweFp6WWx0V2hPT00/edit?usp=sharing

运行这个程序的正确方法是

./program < arq06_B.in

./program < arq07.in

最佳答案

这个 while 循环会一直持续下去,直到它无法读取一个整数或者 i 超过 N。

void readmatrix(int **matrix, int N){
int i, j;

i = 0;
j = 0;
while ( scanf("%d", &matrix[i][j]) == 1) {
j++;
if ( j >= N) {
j = 0;
i++;
}
if ( i >= N) {
break;
}
if ( feof ( stdin)) {
break;
}
}
}

关于c - 在 C 中读取二维矩阵时检测到错误的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25814199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com