繁体   English   中英

如何在 C 中进行格式化输入

[英]How to take formatted input in C

我必须输入 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 是 integer 网格中的模式数。 而 rest 是一个矩阵。

我将如何 go 将此矩阵输入到 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;
}

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

./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 在评论中指出的那样)

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++) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM