问题很简单我应该如何将矩阵从stdin保存到2d数组。问题是我不知道大小,我也应该认识到错误的输入
正确输入的示例:
1 2 3
4 5 6
7 8 9
输入错误的示例:
1 2 3
4 5 6 5
7 8 9
1 2 3 4
首先,我尝试使用scanf读取一维数组的值直到EOF,然后使用1d数组2d数组创建。这个可以吗 ?我不知道scanf如何识别新行。
答案 0 :(得分:4)
fgets()
读取到行尾。strtok()
和空格作为分隔符strtol()
使用malloc()
最初为数组分配内存,您可以使用realloc()
答案 1 :(得分:0)
根据this documentation,scanf
读取由空格分隔的字符串,包括换行符。没有必要明确检查行尾字符。对于所描述的任务,只需读取所需数量的元素即可。
答案 2 :(得分:0)
如果这对您来说不是问题,您可以在1d数组中读取它,获取矩阵大小N = sqrt(elementsCount)并在您的代码中访问元素,如下所示:
array[row*N + col]; //its equivalent of array2d[row][col] from 2d array
或者您可以将其读入1d数组,然后在此处分配矩阵和复制值。
另外,如果stdin中的换行始终表示矩阵中的新行,则可以将其读入2d数组并在此过程中动态重新分配。
我会建议第一种方法
//编辑当然,前两个解决方案适用于NxN矩阵。如果可以有MxN矩阵,则需要使用第三种方法
答案 3 :(得分:0)
我试着用gopl sollution做到这一点。我想念一些针对大小的验证并使用一些常量,因为现在我不关心分配。重要的是从stdin读取。这是正确的解决方案,如何从stdin逐行读取矩阵,结束EOF
#include <stdio.h>
#include <string.h>
#define BUFFERSIZE 10000
int main(int argc, char *argv[]) {
char * pch;
int matrix[25][25];
int row = 0, column = 0;
char buffer[BUFFERSIZE];
printf("Enter a matrix: \n");
while (fgets(buffer, BUFFERSIZE, stdin) != NULL) {
pch = strtok(buffer, " ");
column = 0;
while (pch != NULL) {
int li1 = strtol(pch, NULL, 10);
pch = strtok(NULL, " ");
matrix[row][column] = li1;
column++;
}
row++;
}
printf("Number: %dvs%d\n", row, column);
return 0;
}