微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组int数组中的第二个元素由于某种原因未在外部函数中处理

如何解决数组int数组中的第二个元素由于某种原因未在外部函数中处理

我是编程的新手,开始学习结构。我正在编写一个程序,要求输入学生姓名,3个测试结果,然后将这些结果通过一个摆脱最低分的函数传递。

当我出于某种原因将其传递给该函数时,它只是不显示第二个元素,而是将其替换为第三个元素,而将第三个元素替换为0。

我更改了代码显示我的意思。如果您愿意复制并粘贴以了解我的意思。任何帮助将不胜感激。

#include <stdlib.h>
#define SIZE 1
#define TESTS 3

typedef struct
{
    char name[50];
    int test[TESTS];
    float avg;
}Results;

void best(Results *marks[TESTS]);

int main()
{
    Results nameArr[SIZE];
    for(int i=0; i<SIZE; i++)
    {
        printf("Enter name for student %d: ",i+1);
        scanf("%\s",nameArr[i].name);
        printf("Enter marks (Out of 100) for %s:\n",nameArr[i].name);
        for(int j=0; j<TESTS; j++)
        {
            printf("Test %d: ",j+1);
            scanf("%d",&nameArr[i].test[j]);
        }
    }printf("\n");

    for(int i= 0; i<TESTS; i++)
    {
        printf("Test %d in main() = %d\n",i+1,nameArr[0].test[i]);
    }printf("\n");

    for(int i= 0; i<SIZE; i++)
    {
        best(&nameArr[i].test);
    }

    printf("\n");
    system("PAUSE");
    return 0;
}


void best(Results *marks[TESTS])
{
    for(int i= 0; i<TESTS; i++)
    {
        printf("Test %d in function = %d\n",marks[i]);
    }
}

解决方法

正如MikeCAT在评论中指出的那样,您正在使用printf()语句调用未定义的行为。类型“%d”的参数需要一个十进制值,但是您给它提供了一个指向“%p”参数的结构的指针。我建议您在这里研究printf()函数:https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm

这将帮助您更好地了解如何使用它来准确,适当地打印您想要看到的值。

,

nameArr[i].test的类型是int[TESTS],而不是Results*[TESTS]。为函数参数使用正确的类型。

表达式中的数组也将自动转换为指针(存在某些例外),因此您不需要在数组之前使用&(至少在这种情况下)。

其他几点:

  • 您应该添加#include <stdio.h>才能使用printf()scanf()
  • \s是无效的转义序列。您应该使用"%s"而不是"%\s"
#include <stdio.h> /* add this */
#include <stdlib.h>
#define SIZE 1
#define TESTS 3

typedef struct
{
    char name[50];
    int test[TESTS];
    float avg;
}Results;

/* fix argument type */
void best(int marks[TESTS]);
/* void best(Results *marks[TESTS]); */

int main()
{
    Results nameArr[SIZE];
    for(int i=0; i<SIZE; i++)
    {
        printf("Enter name for student %d: ",i+1);
        /* remove invalid escape sequence */
        scanf("%s",nameArr[i].name);
        /* scanf("%\s",nameArr[i].name); */
        printf("Enter marks (Out of 100) for %s:\n",nameArr[i].name);
        for(int j=0; j<TESTS; j++)
        {
            printf("Test %d: ",j+1);
            scanf("%d",&nameArr[i].test[j]);
        }
    }printf("\n");

    for(int i= 0; i<TESTS; i++)
    {
        printf("Test %d in main() = %d\n",i+1,nameArr[0].test[i]);
    }printf("\n");

    for(int i= 0; i<SIZE; i++)
    {
        /* remove & */
        best(nameArr[i].test);
        /* best(&nameArr[i].test); */
    }

    printf("\n");
    system("PAUSE");
    return 0;
}


/* fix argument type */
void best(int marks[TESTS])
/* void best(Results *marks[TESTS]) */
{
    for(int i= 0; i<TESTS; i++)
    {
        printf("Test %d in function = %d\n",marks[i]);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。