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

将字符串从函数传递到另一个函数

如何解决将字符串从函数传递到另一个函数

这个程序的作用是取每 3 个测试的平均值,并将其分类为“低”、“中”、“高”。 “输入”功能用于从用户收集数据。 “阻止”功能是计算平均值并对其进行分类。 “显示功能显示所有结果。在这个程序中,我可以传递浮点型数据,但为什么不能传递字符串类型数据。有人可以帮我吗?。

#include <stdio.h>
void input ( float*,float*,float* );
void deter (float,float,char* cate);
void display (float,char);


int main ()
{
    float t1_in,t2_in,t3_in,average;
    char category[10];

    input (&t1_in,&t2_in,&t3_in);
    deter(t1_in,&average,&category);
    display(t1_in,average,category);
}

void input ( float* t1,float* t2,float* t3)
{
    printf ("Enter Test 1 >> ");
    scanf ("%f",t1);

    printf ("Enter Test 2 >> ");
    scanf ("%f",t2);

    printf ("Enter Test 3 >> ");
    scanf ("%f",t3);
}


void deter (float tt1_det,float tt2_det,float tt3_det,float* avg,char* cate)
{
    *avg = (tt1_det+tt2_det+tt3_det)/3.0;

    if(*avg<2.0)
    {
        *cate="slow";
    }
    else if(*avg>=2.0 && *avg<=4.0)
    {
        *cate="Medium";
    }
    else if( *avg>4.0)
    {
        *cate="High";
    }
}

void display (float tt1,float tt2,float tt3,float avrg,char ct)
{
    printf ("\nTest 1 is %.2f ",tt1);
    printf ("\nTest 2 is %.2f ",tt2);
    printf ("\nTest 3 is %.2f ",tt3);
    printf ("\nAverage >> %.2f",avrg);
    printf("\nCategory >> %10s",ct);
}

这是我的输出

进入测试 1 >> 1

进入测试 2 >> 2

进入测试 3 >> 3

测试 1 是 1.00

测试 2 是 2.00

测试 3 是 3.00

平均 >> 2.00

进程返回 -1073741819 (0xC0000005) 执行时间:1.478 s

按任意键继续。

解决方法

您需要修复代码中的一些问题:

  1. 把最后一个参数改成char*

    void display(float,float,char*);
    
  2. & 中删除 category

    deter(t1_in,t2_in,t3_in,&average,category);
    
  3. 使用strcpy()函数将字符串复制到指针中:

    if (*avg < 2.0)
        strcpy(cate,"Slow");
    else if (*avg >= 2.0 && *avg <= 4.0)
        strcpy(cate,"Medium");
    else if (*avg > 4.0)
        strcpy(cate,"High");
    
  4. 将参数 char ct 更改为指针 char *ct

    void display(float tt1,float tt2,float tt3,float avrg,char *ct) {
        .
        .
        printf("\nCategory >> %10s",ct);
    }
    

大功告成。

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