【问题标题】:scanning matrix one row at a time一次扫描一行矩阵
【发布时间】:2013-08-27 16:39:49
【问题描述】:

我想逐行扫描 整数 的二维矩阵,即在“C”中一次一行

例如:
如果矩阵是:

1 2 3  
4 5 6  
7 8 9  

那么应该只使用3次scanf并且第一次输入是

1 2 3  

一次,以此类推其他行。

对于字符,我们可以使用类似:

char mat[10][10];
scanf("%s[^\n]%*c", mat[i]);   

整数可以类似吗?

【问题讨论】:

  • 为什么不把数组的三个元素给scanf("%d%d%d",&mat[i],&mat[i+1],&mat[i+2])当然要取out-of-bound的访问权限。
  • 只有三遍scanf ?也许你可以把它们当作字符串,然后从中提取数字
  • @Uchia Itachi 我想你在 mat[i] 之前忘记了 '&'
  • @uchaia:实际上我正在自动化一些任务,这些 i/p 将来自那里。我只是想确定是否有办法扫描空格分隔的整数?
  • @P0W:是的,这将是我最后的选择。首先我想找到一种以整数格式读取的方法

标签: c matrix scanf


【解决方案1】:

如果你不知道列数或行数,那么你可以这样做:

将每一行逐一读入一个字符串。然后在空格字符上拆分当前行(使用例如strtok),并使用例如strtol 将字符串解析为整数。

喜欢这个伪代码

while (fgets(line))
{
    number_string = strtok(line, " ");
    while (number_string != NULL)
    {
        mat[i++][j++] = strtol(number_string, NULL, 10);
        number_string = strtok(NULL, " ");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    相关资源
    最近更新 更多