Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带模式或格式的C scanf_C_Arrays_Format_Scanf - Fatal编程技术网

带模式或格式的C scanf

带模式或格式的C scanf,c,arrays,format,scanf,C,Arrays,Format,Scanf,我必须以这种格式或模式将矩阵扫描到未知大小的动态2D数组(使用malloc): %d、 %d,%d 1,2,3 4, 5, 6 7,8,9 因此,每一条连续的线必须与第一条线一样长。如果第一行有8个Interegr: 5,6,7,8,5,0,4,5 然后,下一行必须包含相同的整数计数 然后我可以按CTRL+D结束标准输入并继续其他计算 我真的不知道如何使用scanf读取这种格式的动态数组数据并使用它们。我可以对2D数组进行malloc并使用它,但我不知道如何做到这一点。我希望,这很容易理解,我感

我必须以这种格式或模式将矩阵扫描到未知大小的动态2D数组(使用malloc):

%d、 %d,%d

1,2,3 4, 5, 6 7,8,9

因此,每一条连续的线必须与第一条线一样长。如果第一行有8个Interegr:

5,6,7,8,5,0,4,5

然后,下一行必须包含相同的整数计数

然后我可以按CTRL+D结束标准输入并继续其他计算

我真的不知道如何使用scanf读取这种格式的动态数组数据并使用它们。我可以对2D数组进行malloc并使用它,但我不知道如何做到这一点。我希望,这很容易理解,我感谢任何帮助

非常感谢你,我为我糟糕的英语感到抱歉。。 Nikolas Ch.

您可以使用以下代码:

 for (int i = 0; i < column; i++)
 {
     for (int j = 0; j < row; j++)
     {
         scanf("%d", &yourArray[i][j]);
     }
 }
for(int i=0;i
scanf
不适合读取换行有意义的输入(特别是当换行和空格之间的差异很重要时)。这是因为它对所有的空白都一视同仁(它大多只是跳过它),空格和换行之间没有什么不同

如果您需要读取新行有意义的数据(例如,如果您想验证每行输入的数字是否与您描述的相同),那么您确实需要读取整行(使用FGET),然后使用sscanf从这些行中读取数字。您可以使用以下内容:

char line[2048];
int i = 0;

while (fgets(line, sizeof(line), input)) {
    char *p = line;
    int j, l;
    while (sscanf(p, "%d %n", &yourArray[i][j], &l) > 0) {
        j++;
        p += l;
        if (*p == ',') p++; }
    i++; }
关于你的声明:我可以使用2D数组,但我不知道怎么做。我不确定你是不是在寻求帮助,在mallocing一个二维数组的数字。。。如果是这样,下面是一种为数字数组创建和释放内存的方法。(此选项适用于
int
,但对于任何数字类型都可以轻松修改)

这一点,再加上其他建议,应该能满足您的需要

int ** Create2D(int **arr, int cols, int rows)
{   
    int space = cols*rows; 
    int    y;

    arr   = calloc(space, sizeof(int));
    for(y=0;y<cols;y++)
    {
        arr[y] = calloc(rows, sizeof(int)); 
    }
    return arr;
}

void free2DInt(int **arr, int cols)
{
    int i;
    for(i=0;i<cols; i++)
        if(arr[i]) free(arr[i]);
    free(arr);  
}
int**Create2D(int**arr、int cols、int行)
{   
int space=cols*行;
int-y;
arr=calloc(空格,sizeof(int));

对于(y=0;y问题指定行数和列数未知。因此,此代码无法回答问题。如果我对行数和列数一无所知,我无法分配内存,因为我们不知道需要多少?@karadictop提示:每一行必须与第一行一样长。获取通知通过阅读第一行内容来了解第一行内容。将您所了解的第一行内容分配给2D,然后重新打开文件,阅读每行内容,将每个元素解析为新的2D数组。
#include <ansi_c.h>
int main(void)
{
    int **array=0, i, j;
    array = Create2D(array, 5, 4);//get the actual row/column values from reading the file once.
    for(i=0;i<5;i++)
        for(j=0;j<4;j++)
            array[i][j]=i*j; //example values for illustration
    free2DInt(array, 5);

    return 0;

}