将数组传递给函数 (C)
Pass array to function (C)
我写了一个函数来旋转数组,
我已经检查过,当代码在一个块中时它可以工作 I.E.一切
在 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
在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 的教程。
根据我的说法,问题出在循环内旋转方法中的最后一个打印语句中。
您必须再次遍历整个数组才能打印旋转后的数组。
像这样。
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 语言的顶部定义函数。
我写了一个函数来旋转数组, 我已经检查过,当代码在一个块中时它可以工作 I.E.一切 在 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
在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 的教程。
根据我的说法,问题出在循环内旋转方法中的最后一个打印语句中。
您必须再次遍历整个数组才能打印旋转后的数组。 像这样。
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 语言的顶部定义函数。