【问题标题】:Pass array to function (C)将数组传递给函数 (C)
【发布时间】:2018-04-10 05:18:47
【问题描述】:

我写了一个函数来旋转一个数组, 我已经检查过,当代码在一个块中时它可以工作。一切 在 main() 下编码,但是当我划分代码以便在不同的函数下完成旋转时,我无法让它工作(它截断而不是旋转)。 我很确定这与数组指针有关。

对不起,菜鸟

请帮忙:

#include<stdio.h>
void rotate(int *arr,int length);
int main()
 {
 // this code creates an array via input
 int length;
 int i;
 int num;
    printf("enter length of array\n");
    scanf("%d",&length);
 int arr[length];
 for (i=0;i<length;i++) {
    printf("enter number\n");
    scanf("%d",&num);
    arr[i]=num;
 }
     // just prints original
    for(i=0;i<length;i++){
    printf("original arr[%d]=%d\n",i,arr[i]);

    }


 //runs rotate function

 rotate(arr,length);

 return 0;
 }

//the rotate function inputs rotation amount and uses nested for loop to 
execute
void rotate(int *arr,int length)
{
int n;
 printf("by how many do you want to rotate array?");
    scanf("%d",&n);
    int i;
    int j;
    int temp;
    for (j=0;j<n;j++)
    {
            temp=arr[0];
        for (i=0;i<length-1;i++)
        {

            arr[i]=arr[i+1]; 

        }
    arr[length-1]=temp;
            printf("rotated arr[%d] = %d\n",i,arr[i]);
    }


    }

我的输出如下所示:

enter length of array
5
enter number
1
enter number
2
enter number
3
enter number
4
enter number
5
original arr[0]=1
original arr[1]=2
original arr[2]=3
original arr[3]=4
original arr[4]=5
by how many do you want to rotate array?
3
rotated arr[4] = 1
rotated arr[4] = 2
rotated arr[4] = 3

RUN FINISHED; exit value 0; real time: 9s; user: 0ms; system: 0ms

【问题讨论】:

  • 你能发布一个你得到的示例输入和输出
  • 当然,添加到帖子末尾,谢谢!

标签: arrays function pointers rotation


【解决方案1】:

在 C 语言中,您需要在“main”函数之前声明函数,或者在 main 函数之上进行声明和定义。也请分享您的错误消息以寻求帮助。

另外,在 C 语言中,你不能真正创建这样的动态数组(即取一个整数值,然后使用它定义数组的大小“int array[integer]”是错误的,如果值在运行时给出整数)

阅读 http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/2-C-adv-data/dyn-array.html 或任何其他关于 C 中动态数组以及如何使用 malloc 和 calloc 的教程。

【讨论】:

  • 谢谢,我尝试在 main 之前声明,但它没有改变任何东西,顺便说一句,我没有收到错误消息,只是程序没有按预期工作。
  • 我明白,但是因为我在初始化 arr[length] 之前输入了“length”,这不是一个简单的数组吗?我还必须强调,这段代码在我将它划分为单独的函数之前一直有效,所以尽管它写得很糟糕,但这是我想要修复的代码的一部分......
  • 我已经更改了原始帖子,以便在标题中声明该函数,但它仍然不起作用。
  • 哦,看来您使用的是较新版本的 C,不管它是什么。这里的逻辑问题是,您需要在 for 循环块内有 print 语句,其中 i 的值发生变化,而不是 j 的值发生变化,因为您的 print 语句将 i 作为变量
  • 或者只是在整个东西之外再做一个循环来打印它
【解决方案2】:

据我说,问题出在循环内部的旋转方法中的最后一个打印语句中。

您必须再次遍历整个数组才能打印旋转后的数组。 像这样。

void rotate(int *arr,int length)
{
int n;
 printf("by how many do you want to rotate array?");
 scanf("%d",&n);
 int i;
 int j;
 int temp;
for (j=0;j<n;j++)
{
        temp=arr[0];
    for (i=0;i<length-1;i++)
    {

        arr[i]=arr[i+1]; 

    }
arr[length-1]=temp;

}

for(i=0;i<length;i++){

  printf("original arr[%d]=%d\n",i,arr[i]);

  }

}

这会起作用。

而且,始终在 c 的顶部定义函数。

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 2013-06-26
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多