【问题标题】:How to take formatted input in C如何在 C 中采用格式化输入
【发布时间】:2022-01-06 23:01:25
【问题描述】:

我必须为 c 中的一个数组输入输入。示例输入将是这样的 -

33 33 2
000000000000000000000010000000000
000000000000000000000111000000000
000000000000000000001110100000000
000000000000000000011111111000000
000000000000000000001011100000000
000000000000000000000111000000000
000000000000000000000010000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
011111111111110000000000000000000
011011111111110000000000000000000
011111111110110000000000000000000
011111111111110000000000000000000
011111111111110000000000000000000
011111011111110000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000

这里,33 和 33 是​​ m 行和 n 列。 2 是整数网格中的模式数。而其余的是矩阵。

我将如何将这个矩阵输入到 C 中的数组中。很长一段时间以来一直存在问题。这是我当前的代码。

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

int main(int argc, char *argv[]) 
{
    int **array;

    int m = atoi(argv[1]);
    int n = atoi(argv[2]);

    array = calloc(m, sizeof(int *));
    for (int i = 0; i < m; i++) {
        array[i] = calloc(n, sizeof(int));
    }

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++)
        {
            /*Code to get input from*/
        }
        
    }

    for (int i = 0; i < m; i++) {
        free(array[i]);
    }

    free(array);

    return 0;
}

【问题讨论】:

  • 使用 scanf("%s", buff) 读取字符串。这将一直读到下一行,然后您可以将每个字符转换为您想要的数字
  • 首先:检查argc是否正确并采取相应措施

标签: c multidimensional-array io


【解决方案1】:

假设您正在使用类似的方式通过命令行传递数据(您的示例输入)

./program $(<data.txt)

您可以通过以下方式获取输入:

for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        array[i][j] = argv[4 + i][j]; // Get the value as character
    }
}

然后打印

for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        printf("%c", array[i][j]); // Print the character
    }
    printf("\n");
}

或(正如 @tshiono 在 cmets 中指出的那样)

for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        array[i][j] = argv[4 + i][j] - '0'; // Get the value as integer
    }
}

并使用打印

for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        printf("%d", array[i][j]); // Print the integer
    }
    printf("\n");
}

我会使用有意义的名字

int rows = atoi(argv[1]);
int cols = atoi(argv[2]);

而不是

int m = atoi(argv[1]);
int n = atoi(argv[2]);

for (int row = 0; row < rows; row++) {
    for (int col = 0; col < cols; col++) {

而不是

for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {

【讨论】:

  • OP 在哪里说他们在使用 Linux 和 bash? AFAIK $(&lt;data.txt) 不是 C 语言 ;-)
  • @SergeBallesta 是的,你是对的,这就是为什么我说 “使用类似...” 我不知道在 Windows 中是如何完成的:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多