【问题标题】:Function that returns 1D array and writes the results to a text file返回一维数组并将结果写入文本文件的函数
【发布时间】:2018-11-11 17:05:54
【问题描述】:

有人要求我编写一个代码,该代码从文本文件中获取 2、1D 数组,添加它们,然后将结果返回到另一个文本文件。然而,我仍然得到关于指针的错误。我是 C 新手,如果有人能给我解释一下,我会很高兴。

int result(int a[], int b[])
{
  int *wsk = &c_tab[0];
  char choice;
  printf("0.Add\n1.Substract");
  scanf("%c", &choice);
  for (i=0; i<9; i++) {
    if (choice== '0')
    {
      *wsk = a[i] + b[i];
      wsk++;
    }
    else if (choice== '1')
    {
      *wsk = a[i] - b [i];
      wsk++
    }
  }
  return *wsk;
}

【问题讨论】:

  • 一张代码无法编译。图片中的代码,即使是输入的,也不能构建成二进制文件。波兰语应该不是问题,但令人惊讶的是,翻译代码标识符也符合您的兴趣;如果他们有任何好处,他们会帮助理解。 “获取有关指针的错误”非常简短,更不用说对您的问题的无用总结。请考虑创建minimal reproducible example 并更详细地解释会发生什么以及应该发生什么。
  • 请考虑您需要什么样的帮助。你期待解释吗?那你为什么不详细解释你的问题呢?你要代码吗?那你为什么不自己提供代码呢?一张不做程序的代码图片就不是一回事了。
  • 这是我第一次使用 Stack。我很抱歉所有的错误 - 我很着急。谢谢你的帮助:)

标签: c arrays function pointers


【解决方案1】:

我看到的第一个错误是你需要用返回值的类型声明函数类型,在这种情况下,函数必须是:

int *dzialanie(int a[], int b[]){
    ...
    return wsk;
}

另一个错误是在for循环中,操作必须是:

...
for (int i=0; i<9; i++){
    *(wsk + i) = a[i] + b[i];
}
...

另一个也一样(请注意,您没有声明 i 也是一个变量)。另一种方法是:

wsk[i] = a[i] - b[i];

是一样的。 如果你已经知道这两个数组的维度,也许最好将参数作为指针,它看起来像:

int dzialanie(int *a, int *b){
    ...
}  

你必须分配内存,这可以通过 malloc 来完成:

wsk = (int *)malloc(10*sizeof(int));

在程序结束时,您需要释放分配的内存,执行以下操作:

free(wsk);

希望你能理解,我的英语很差,我来自阿根廷。问候!

【讨论】:

    【解决方案2】:

    由于您使用的是全局变量,因此返回类型应该是 void(和或某种形式的计算已经完成的指示。这反过来可能是一个简单的返回值 -1 或 w/e(我会把那部分留给你)。

    int res[10]; // global variable
    
    void add(int *a, int *b) // no return value, new array will be saved globally(not advisable)
    {
        int sign = -1; // your +- check
        printf("0.Suma\n1.Roznica");
        scanf("%c", &sign);
        if (sign == 0)
        {
            for (int i = 0; i < 9; i++)
                res[i] = a[i] + b[i]; 
        }
        else if (sign == 1)
        {
            for (int i = 0; i < 9; i++)
                res[i] = a[i] - b[i]; 
        }
    }
    

    另一种方法是使用 a 或 b 作为“返回”值,并进行简单的更改,例如 a[i] += b[i] -> 现在 a 的值是 a + b。这样你就不必处理超出范围的指针等(如何从函数返回指针的文档(以安全方式)是here)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 2021-02-16
      • 2011-04-10
      • 2016-02-04
      相关资源
      最近更新 更多