[英]How to read matrix from stdin in c
问题很简单,如何将矩阵从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如何识别新行。
fgets()
读取直到行尾。 strtok()
和空格作为分隔符来断开行 strtol()
将每个令牌转换为整数 使用malloc()
最初为数组分配内存,然后可以使用realloc()
根据输入来增加数组的大小
根据本文档 , scanf
读取由空格分隔的字符串,包括换行符。 不必显式检查行尾字符。 对于所描述的任务,仅读取所需数量的元素就足够了。
如果这对您来说不是问题,则可以在1d数组中读取它,获得矩阵大小N = sqrt(elementsCount)并在代码访问元素中像这样:
array[row*N + col]; //its equivalent of array2d[row][col] from 2d array
或者您可以将其读取到一维数组中,然后分配矩阵并在此处复制值。
同样,如果stdin中的换行符总是表示矩阵中有新行,则可以将其读入2d数组并在此过程中动态地重新分配它。
我建议第一种方法
//编辑,当然,前两个解决方案适用于NxN矩阵。 如果可以有MxN矩阵,则需要使用第三种方法
我尝试用gopl解决方案做到这一点。 我错过了一些针对大小的验证,并使用了一些常量,因为现在我不在乎分配。 重要的只是从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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.