C语言计算器汇率换算问题

本人在设计汇率换算代码时想法是:先输入你要转换的金额,然后就是输入转换的货币种类,最后就是选择要转换出的货币种类,我不太理解怎么设计比较好。

github上的修改了一点

#include <stdio.h>
#include <string.h>

typedef struct {
    char currency[10];
    float rate;
} ExchangeRate;

ExchangeRate rates[] = {
    {"USD", 6.5},
    {"EUR", 7.8},
    {"JPY", 0.06},
    // ...
};

int main() {
    float amount;
    char from[10], to[10];
    float from_rate = 0, to_rate = 0;

    printf("请输入要转换的金额:");
    scanf("%f", &amount);
    printf("请输入要转换的货币种类:");
    scanf("%s", from);

    printf("请输入要转换成的货币种类:");
    scanf("%s", to);

    for (int i = 0; i < sizeof(rates) / sizeof(ExchangeRate); i++) {
        if (strcmp(from, rates[i].currency) == 0) {
            from_rate = rates[i].rate;
        }
        if (strcmp(to, rates[i].currency) == 0) {
            to_rate = rates[i].rate;
        }
    }


    float result = amount / from_rate * to_rate;
    printf("%f %s 可以兑换 %f %s\n", amount, from, result, to);
    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7710900
  • 你也可以参考下这篇文章:输入某个大写字母,产生一个金字塔图案。(字符与数字间的转换)
  • 除此之外, 这篇博客: 【C语言基础】循环中的 编写一个程序,提示用户输入大写字母。使用嵌套循环以下面金字塔型的格式打印字母: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • A
    ABA
    ABCBA
    ABCDCBA
    ABCDEDCBA

    #include<stdio.h>
    int main(){
        int i,j,n,n1,n2;
        // A=65,a=97
        n1=0;
        printf("请输入打印的层数:");
        scanf("%d",&n);
        for(i=0;i<n;i++){
            for(j=0;j<=i;j++){
                printf("%c",j+65);
                n1=j+65;
                // printf("%d",n1);
            }
            for(j=0;j<i;j++){
                printf("%c",n1-j-1);
            }
            printf("\n");
        }
    }
    
  • 您还可以看一下 张勇老师的初级到CS开发高手通用权限管理系统全程实录课程中的 如何设置带复选框的树形控件并可以联动小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    优化C语言汇率换算计算器的设计

    目前设计存在的问题

    目前设计的汇率换算计算器要求用户输入要转换的金额、原货币种类和转换的货币种类,这种设计存在以下问题:

    1. 用户需要输入多个参数,使用起来比较繁琐。
    2. 输入的参数需要进行较为繁琐的判断和转换。

    优化方案

    考虑优化设计方案,可以引入外部API来完成货币转换,这样可以避免繁琐的判断和转换过程。具体优化方案如下:

    1. 修改程序的用户界面,只要求用户输入要转换的金额即可。
    2. 引入外部API来获取汇率信息和完成货币转换。可以使用一些第三方API,比如Fixer API、Open Exchange Rates、Exchange Rates API等。
    3. 编写代码调用API获取汇率信息,计算转换结果并输出。

    优化后的代码示例

    #include <stdio.h>
    #include <stdlib.h>
    #include <curl/curl.h>
    #include <jansson.h>
    
    #define BASE_URL "http://data.fixer.io/api/"
    #define API_KEY "your_api_key"
    
    static size_t write_callback(void *contents, size_t size, size_t nmemb, void *userp) {
        char *buf = (char *)userp;
        strncat(buf, contents, size * nmemb);
        return size * nmemb;
    }
    
    double get_exchange_rate(char* from, char* to) {
        char url[500];
        CURL *curl;
        CURLcode res;
        char buffer[4096];
        char *err;
        json_t *root, *success, *rates, *rate, *value;
        json_error_t json_err;
        double from_rate, to_rate, exchange_rate;
        int ret;
    
        from_rate = 0.0;
        to_rate = 0.0;
        exchange_rate = 0.0;
    
        sprintf(url, "%s/latest?access_key=%s&symbols=%s,%s", BASE_URL, API_KEY, from, to);
    
        buf[0] = '\0';
        curl = curl_easy_init();
        if(curl) {
    
            curl_easy_setopt(curl, CURLOPT_URL, url);
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
            res = curl_easy_perform(curl);
            if(res != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
                return 0.0;
            }
    
            root = json_loads(buffer, 0, &json_err);
            if (root) {
                success = json_object_get(root, "success");
                if (success && json_is_boolean(success)) {
                    if (json_is_true(success)) {
                        rates = json_object_get(root, "rates");
                        if (rates && json_is_object(rates)) {
                            rate = json_object_get(rates, from);
                            if (rate && json_is_number(rate)) {
                                from_rate = json_number_value(rate);
                            }
                            rate = json_object_get(rates, to);
                            if (rate && json_is_number(rate)) {
                                to_rate = json_number_value(rate);
                            }
                        }
                    } else {
                        err = json_dumps(json_object_get(root, "error"), 0);
                        fprintf(stderr, "API Error: %s\n", err);
                        json_decref(root);
                        free(err);
                        return 0.0;                
                    }
                }
                json_decref(root);
            } else {
                fprintf(stderr, "json_loads() failed.\n");
                return 0.0;
            }
    
            curl_easy_cleanup(curl);
        }
    
        exchange_rate = to_rate / from_rate;
    
        return exchange_rate;
    }
    
    int main() {
        double amount;
        char from[10], to[10];
        double exchange_rate, converted_amount;
    
        printf("请输入要转换的金额:\n");
        scanf("%lf", &amount);
        printf("请输入原货币种类(如EUR):\n");
        scanf("%s", from);
        printf("请输入目标货币种类(如USD):\n");
        scanf("%s", to);
    
        exchange_rate = get_exchange_rate(from, to);
        if (exchange_rate != 0.0) {
            converted_amount = amount * exchange_rate;
            printf("%lf %s = %lf %s\n", amount, from, converted_amount, to);
        } else {
            printf("无法获取汇率信息\n");
        }
    
        return 0;
    }
    

    注:以上示例代码使用了libcurl和jansson库,需要在编译时加上对应的库文件链接。