gpt4 book ai didi

C 将矩阵读入动态数组

转载 作者:行者123 更新时间:2023-11-30 15:35:27 25 4
gpt4 key购买 nike

我正在尝试编写用于读取矩阵读取器的代码,该读取器将从重定向文件中读取矩阵(因此我的程序中不会使用 FILE 函数),将其存储在动态创建的数组中,然后打印到控制台.

重要说明数组是动态的(这意味着尺寸是通过读取整个文件并计算行数和列数来获得的。

我尝试用两种不同的方式编写代码来执行此操作,但都导致错误的输出:

版本A:

while(ch != EOF) {
ch = fgetc(stdin);

if(ch == ' ') {
fields++;
}
if(ch == '\n') {
rows++;
}

}

版本B:

do {
c=getchar();

if(c == ' '){
fields++;
}

} while (c != EOF);

问题

  1. while(ch != EOF)while(c=getchar() != EOF) 是否表示未到达 LINE 末尾或 end文件的内容?

我对上面显示的版本 B 不太满意。当用于测试文件时:

10 20 30 40
50 60 70 80
90 10 20 30
40 50 60 70

我得到输出:

50 60 70 80
90 10 20 30
40 50 60 70
70 70 70 70

我认为我在这里遇到的问题是,每当我读取文件时,一旦遇到 EOF,它就会跳出循环,然后它位于文件的第二行,因此为什么输出从第二行开始行,然后将最后一个数字复制 X 次以填充矩阵的其余部分。

用我目前的方法可以实现我的目标吗?这是我的全部代码,谢谢。

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

int main() {
int rows=0;
int fields=1;
int i=0;
int j=0;
int c=0;
char ch = '\0';

/* while(ch != EOF) {
ch = fgetc(stdin);
if(ch == ' ') {
fields++;
}
if(ch == '\n') {
rows++;
}
} */

do {
c=getchar();
if(c == ' '){
fields++;
}

} while (c != 10);


int **array;
array = malloc(fields * sizeof(int *));

if(array == NULL) {
printf("Out of memory\n");
exit(1);
}

for(i = 0; i < fields; i++) {
array[i] = malloc(fields * sizeof(int));
if(array[i] == NULL) {
printf("Out of memory\n");
exit(1);
}

}

for(i = 0; i < fields; i++) {
for(j = 0; j < 4; j++) {
int k;
scanf("%d", &k);
array[i][j] = k;
printf("%d ", k);
}
printf("\n");
}
}

最佳答案

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

int main(){
int rows = 0;
int cols = 0;
int fields = 0;
int i, j, c, n, status;;
int **array;
char ch;

array = malloc((rows+1) * sizeof(int*));//check omit
array[rows] = NULL;

while(0<(status = scanf("%d%c", &n, &ch))){
if(status>1){
if(cols == fields){
array[rows] = realloc(array[rows], (fields=cols+1)*sizeof(int));
}
array[rows][cols++] = n;
if (ch == '\n'){
array = realloc(array, (++rows+1) * sizeof(int*));
array[rows] = malloc(fields*sizeof(int));
cols = 0;
}
} else {
array[rows][cols++] = n;
break;
}
}
if(cols == 0){
free(array[rows--]);
}
for(i=0;i<=rows;++i){
for(j=0;j<fields;++j){
printf("%d ", array[i][j]);
}
printf("\n");
free(array[i]);
}
free(array);
return 0;
}

关于C 将矩阵读入动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916396/

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