这个方法返回int Nrows和int Ncols吗?

时间:2017-01-27 01:30:01

标签: c

我对C编程完全不熟悉(只做java)并且语句不同以至于让我感到困惑。 我想知道我的方法标题是否表明我需要在方法中声明Nrows和Ncols(来自我的main方法)?只是简单地将它们设置为某个变量?

collectionView.reloadData()

此外,如果我的.txt文档看起来像这样:

#include <stdio.h>

void RdSize(int *Nrows, int *Ncols)
{
    Nrows = NULL;
    Ncols = NULL;
    FILE *in = fopen("A1in.txt","r");
    if(in == NULL) { perror("Error opening file");}
    else
    {   
        int i;
        char input[4];  //I have no idea how to set the size of the array to
                        //the length of the first line of the input file 
                        //(which has 4 chars, but is not optimal to put the 
                        //number 4)

        for(i = 0; i < sizeof(input); i++)
        {
            input[i] = fgetc(in);   //trying to copy each char into input[] 
                                    //array

            if(isdigit(input[i]) && Nrows == NULL)
            {
                Nrows = input[i] - '0'; //converting from char to int
            }                           //Here I'm setting Nrows to
                                        //something. Is this all I do?
            if(isdigit(input[i]) && Nrows != NULL)
            {
                Ncols = input[i] - '0'; //converting from char to int
            }                           //setting Ncols
        }
    }
    fclose(in);
}

将此文件放入.txt文件中的2d char数组的最佳方法是什么?

非常感谢!

2 个答案:

答案 0 :(得分:1)

要从文件的第一行读取两个数字,您只需使用fscanf()代替循环。

void RdSize(int *Nrows, int *Ncols)
{
    FILE *in = fopen("A1in.txt","r");
    if(in == NULL) { 
        perror("Error opening file");
        return;
    }
    if (fscanf(in, "%d %d", Nrows, Ncols) != 2) {
        printf("Error reading size\n");
    }
    fclose(in);
}

%d表示解析文件中的整数。这些数字被写入NrowsNcols指向的内存,这是调用者的变量。

答案 1 :(得分:0)

排序答案是否定的。就像Java一样,方法/函数的参数应该在别处定义并传入......参数的目的。

NrowsNcolsint指针,这意味着它们不是保存值本身,而是将地址存储在保存值的内存中,可以通过取消引用来访问指针前缀为*,例如*Ncols

我建议阅读和学习更多关于指针,因为它们在C / C ++编程中扮演着重要的角色。

https://users.cs.cf.ac.uk/Dave.Marshall/C/node10.html