Arrays 有人能告诉我吗;数组函数如何越界;?如果不是,代码是否正确?

Arrays 有人能告诉我吗;数组函数如何越界;?如果不是,代码是否正确?,arrays,c,function,Arrays,C,Function,声明一个长度为10的整数数组。编写一个函数void readValues(int numbers[]),从键盘读取10到40范围内的值,如果输入值超出10到40,则提示替换 用一个单独的函数编写一个C程序,该函数将数组数的元素循环左移n个位置。n是一个正数,应该从键盘上读取 以下是输入示例:-111314151617181920 (int n=)5 输出:-16 17 18 19 20 11 12 13 14 15 #include <stdio.h> //We will take

声明一个长度为10的整数数组。编写一个函数void readValues(int numbers[]),从键盘读取10到40范围内的值,如果输入值超出10到40,则提示替换

用一个单独的函数编写一个C程序,该函数将数组数的元素循环左移n个位置。n是一个正数,应该从键盘上读取

以下是输入示例:-111314151617181920 (int n=)5 输出:-16 17 18 19 20 11 12 13 14 15

#include <stdio.h>
//We will take input of numbers from the user
void readValues(int numbers[])
{
    int i;
    for(i=0;i<10;i++)
    {
        int a;
        scanf("%d",&a);
        if(a>40 || a<10)
        {
            printf("Please enter a value in range:");//If user puts number greater than 40 or less than 10
            scanf("%d",&a);
            numbers[i]=a;
        }
        else
        {
            numbers[i]=a;
        }
    }
}
//now we will put conditions for reversing numbers
int reverse(int numbers[])
{
    int i,j,n;
    int temp=0;
    printf("int n = ");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        int b = numbers[0];
        for(j=0;j<10;j++)
        {
            temp = numbers[j];
            numbers[j]=numbers[j+1];
            numbers[j+1]=temp;
        }
        numbers[9]=b;
    }
    for(i=0;i<10;i++)
    {
        printf("%d ",numbers[i]);
    }
}
int main()
{
    int numbers[10];
    readValues(numbers);
    reverse(numbers);
    return 0;
}
#包括
//我们将从用户那里获取数字输入
无效读取值(整数[])
{
int i;

对于(i=0;i40 | | a而言,使用
j
变量的循环正在使用数字[j+1]进行访问。 仔细检查循环条件


因为这是家庭作业,我只给你一个提示,不为你做。

正如在多条评论中已经指出的那样,你的老师是对的-你访问数组超出了界限-这里:

    int b = numbers[0];
    for(j=0;j<10;j++)
    {
        temp = numbers[j];
        numbers[j]=numbers[j+1];
        numbers[j+1]=temp;
    }
    numbers[9]=b;
因此,代码可以是:

    int b = numbers[0];
    for(j=0;j<9;j++)    // Notice the 9 instead of 10
    {
        numbers[j]=numbers[j+1];
    }
    numbers[9]=b;
intb=数字[0];

对于(j=0;j)你的家庭作业并不比任何人的问题都重要。请删除标题中的尖叫。为什么它很紧急?请注意,它传达的信息是:当你有时间做的时候,你没有费劲去做。既然它很紧急,我们为什么要费劲呢?“为我工作很好”是未定义行为最常见的表现形式。考虑数组索引和
j+1
几分钟。首先,正如我前面所说的,这并不紧急。其次,在循环中,当j等于10时,您访问“第11个元素”(由于
数字[j+1]
部分)。以防万一你的老师没有提到,但是对于一个应该做一些数字旋转的函数来说,
reverse
这个名字是个坏名字。这不是家庭作业,只是为了复习。我发现了一篇与之相关的文章,它也用同样的方法解决了这个问题。非常感谢你的解释,但遗憾的是这意味着没有分数;-;
    int b = numbers[0];
    for(j=0;j<9;j++)    // Notice the 9 instead of 10
    {
        numbers[j]=numbers[j+1];
    }
    numbers[9]=b;