【问题标题】:Why doesn't the reverse function I defined execute properly?为什么我定义的反向函数没有正确执行?
【发布时间】:2021-02-15 14:52:01
【问题描述】:

为什么renverser 函数(反向)不能完成这项工作,为什么程序在初始化表后立即退出?

#include <stdio.h>
#include <stdlib.h>
void renverser(int t[])
{   int j,i,n;
    for(i=0,j=n-1;i<j;i++,j--)
    {
        int a=t[i];
        t[i]=t[j];
        t[i]=a;
    }
    for (i=0;i<n;i++)
    {
        printf("%d",t[i]);
    }
}

int main()
{   int i,n;
    float t[100];
    printf("donner le taille du tableau a renverser \n :");
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {   printf("donner l'element %d: \n",i);
        scanf("%d",&t[i]);
    }
    renverser(t);
    return 0;
}

【问题讨论】:

  • for(i=0,j=n-1;i&lt;j;i++,j--) - 因为n 在那个时间点没有定义的值。 renverser 中的 nmain 中的 n 不同。您需要删除 renverser 中的那个,并将其作为附加参数从 main 传递给您的函数。
  • 调试是您学习编码时需要开发的一项关键技能。阅读this article 获取帮助您入门的提示。

标签: arrays c reverse function-definition


【解决方案1】:

该函数没有意义,因为传递的数组的大小是未知的。

此外,该函数具有未定义的行为,因为使用了未初始化的变量n

函数参数的类型是int *,而传递的参数表达式的类型是float *

看来你的意思是下面的数组声明

int t[100];

该函数应该只做一件事:反转一个数组。

你应该在 main 中输出的结果数组。

函数可以通过以下方式声明和定义

void renverser( int t[], size_t n )
{
    for ( size_t i = 0; i < n / 2; i++ )
    {
        int tmp = t[i];
        t[i] = t[n - i - 1];
        t[n - i - 1] = tmp;
    }
}

函数可以像这样调用

renverser( t, n );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多