首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个函数中从多个参数中获取值,并在c中的main函数中打印它?

如何在一个函数中从多个参数中获取值,并在c中的main函数中打印它?
EN

Stack Overflow用户
提问于 2020-06-24 16:35:19
回答 3查看 96关注 0票数 1

目前我在学习c编程语言,但是我有一个问题,我可以在一个函数中从多个参数中获得一个值,然后在c中的main函数中打印出来吗?我已经创建了一个带有两个参数的函数,但不知何故,我只需要打印一个参数,该参数只出现在一个进程中,即我在main函数中创建了多个操作。

这是我的代码:

代码语言:javascript
复制
#include<stdio.h>
float bakeryShop(float price_a, float price_b)
{
    float  discountA, discountB;
    discountA = price_a - (price_a*45/100);
    discountB = price_b - (price_b*60/100);
    
    printf("%.2f", discountA);
    return (discountA);
    
    printf("%.2f", discountB);
    return (discountB);
    
        
}
main()
{
char name_item_a[200];
    char name_item_b[200];
    float price_a, price_b;
    float discountA, discountB, result;
    
    
    printf("Enter item A: ");
    scanf("%s", &name_item_a);
    printf("Enter price for item A: ");
    scanf("%f", &price_a);
    
    
    printf("Enter item B: ");
    scanf("%s", &name_item_b);
    printf("Enter price for item B: ");
    scanf("%f", &price_b);
    
    printf("%s\n", name_item_a);
    bakeryShop(price_a, price_b);
    printf("%.2f", result); 
    return price_a;
    
    
    printf("%s\n", name_item_b);
    result = bakeryShop(price_a, price_b);
    printf("%.2f", result);  
    return price_b;
    
    
    
}

如果您可以在bakeryShop函数中看到,我创建了两个进程,即discountA和discountB,但是如何在main函数中只显示折扣A ??

因为输出应该是这样的,

代码语言:javascript
复制
ITEM A 
Name: 
Original Price: RM 
Price after 45% discount: RM 

ITEM B 
Name: 
Original Price: 
M Price after 60% 
discount: RM

但是我不知道如何只得到一个工序折扣A和另一个工序折扣B

EN

回答 3

Stack Overflow用户

发布于 2020-06-24 16:47:29

我相信你想这样定义这个函数:

代码语言:javascript
复制
float bakeryShop(float price, float discount_percent)
{
    float  discount;
    discount = price - (price*discount_percent/100);
    
    printf("%.2f", discount);
    return discount;
}

然后像这样使用它:

代码语言:javascript
复制
 printf("%s\n", name_item_a);
 result = bakeryShop(price_a, 45);
 printf("%.2f", result); 
    
 printf("%s\n", name_item_b);
 result = bakeryShop(price_b, 60);
 printf("%.2f", result);  

因为您在上面的代码中所做的操作在C中根本不起作用--您不能从一个函数多次返回。如果返回,则从函数返回一次,仅此而已。

因此,对每一项单独使用这个函数,就C语言而言,它将是有用的和有意义的。

票数 2
EN

Stack Overflow用户

发布于 2020-06-24 16:50:43

你不能从这样的函数中返回2个变量。

代码语言:javascript
复制
float bakeryShop(float price_a, float price_b)
{
 
    return (discountA);
    
    return (discountB);
}

这将只返回第一个变量。因为price_a和price_b没有连接-你只能在函数中带一个参数。然后从main方法调用该函数两次。像这样的东西-

代码语言:javascript
复制
float bakeryShop(float price)
{
    float  discount;
    discount = price - (price*45/100);
    return (discount); 
}
int main(){
    int price1, price2;
    scanf("%d, %d", &price1, &price2);
    float discount1 = bakeryShop(price1);
    float discount2 = bakeryShop(price2);
    printf("%.2f", discount1);
    printf("%.2f", discount2);
}
票数 2
EN

Stack Overflow用户

发布于 2020-06-24 17:42:26

你的问题有点让人困惑,但如果我理解正确的话,那么你基本上就是试图根据用户输入来计算两个“商品”的折扣价格,其中每个商品都有一个唯一的折扣( item A__的__price/45*100item B__的price/60*100 )-而你却一直试图从应该计算折扣的函数中返回这两个商品的折扣。

我会用不同的方式来处理这个问题。既然物品A和B都是由同一组信息(名称、价格和后来计算出的折扣价格)定义的,那么为什么不将这些信息组合到一个"Item"结构中呢?

另外,既然折扣是特定于每个商品的,而不是创建一个将多个商品作为参数并分别计算每个商品的折扣的函数(产生返回多个值的问题,并使函数的点无效,因为您必须根据需要在main中计算多少商品来展开或收缩函数),为什么不创建一个函数来一次计算单个商品的折扣,并将折扣指定为一个参数?

代码语言:javascript
复制
#include <stdio.h>

struct Item {
    char Name[200];

    float Price;
    float DiscountedPrice;
};

void ApplyDiscount(Item* item, float amount) {
    item->DiscountedPrice = (item->Price * amount) / 100.0;
}

// Or, if you haven't studied pointers yet..
Item ApplyDiscount(Item item, float amount) {
    item.DiscountedPrice = (item.Price * amount) / 100.0;
    return item;
}

int main() {
    Item item_a, item_b;

    printf("Item A name: ");
    scanf("%s", &item_a.Name);
    printf("Item A price: ");
    scanf("%f", &item_a.Price);

    printf("Item B name: ");
    scanf("%s", &item_b.Name);
    printf("Item B price: ");
    scanf("%f", &item_b.Price);

    ApplyDiscount(&item_a, 45);
    ApplyDiscount(&item_b, 60);

    printf("%s: %.2f\n", &item_a.Name, item_a.DiscountedPrice);
    printf("%s: %.2f\n", &item_b.Name, item_b.DiscountedPrice);
}

如果你只想知道如何从一个函数返回多个值,有多种方法。一种这样的方法是通过作为参数传递的指针写入值,如下所示

代码语言:javascript
复制
void ApplyDiscount(float item_a_price, float item_b_price, float* item_a_result, float* item_b_result) {
    *item_a_result = (item_a_price * 45.0) / 100.0;
    *item_b_result = (item_b_price * 60.0) / 100.0;
}

int main() {
    float item_a_price = 180;
    float item_b_price = 42;

    float item_a_result, item_b_result;

    ApplyDiscount(item_a_price, item_b_price, &item_a_result, &item_b_result);
}

但我并不建议这样做,因为它可能很快就会变得相当混乱。

您也可以将结果组合在一个结构中,但如果您无论如何都要这样做,那么您也可以像我之前建议的那样创建一个"Item"类型。

代码语言:javascript
复制
struct Results {
    float ResultA;
    float ResultB;
};

Results ApplyDiscount(float item_a_price, float item_b_price) {
    Results results;

    results.ResultA = (item_a_price / 45.0) * 100.0;
    results.ResultB = (item_b_price / 60.0) * 100.0;

    return results;
}

int main() {
    float item_a_price = 180;
    float item_b_price = 42;

    float item_a_result, item_b_result;

    Results results = ApplyDiscount(item_a_price, item_b_price);

    item_a_result = results.ResultA;
    item_b_result = results.ResultB;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62550943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档