本人在设计汇率换算代码时想法是:先输入你要转换的金额,然后就是输入转换的货币种类,最后就是选择要转换出的货币种类,我不太理解怎么设计比较好。
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;
}
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");
}
}
目前设计的汇率换算计算器要求用户输入要转换的金额、原货币种类和转换的货币种类,这种设计存在以下问题:
考虑优化设计方案,可以引入外部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库,需要在编译时加上对应的库文件链接。