经验不够,不知道有没有相关的函数,只能写一大串代码,但是写完又不知道哪里错了,不管输啥结果都是一样的。
case后面都要加break啊
1.case后面没加break,导致贯穿标签
2.直接减掉ascii码就可以了,三个if的事,写那么多不累吗
#include<stdio.h>
int main(){
int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
printf("请输入年-月-日:\n");
scanf("%d-%d-%d",&year,&month,&day);
if(year%4==0&&year%100!=0||year%400==0){//判断是否闰年
days[2]++;//二月29天
}
if(((day+10)%days[month])==0){ //判断加10天后月份会不会加1
day=day+10;
printf("10天后的时间为:\n%d-%d-%d",year,month,day);
}
else{ //月份加1
day=day+10-days[month];
month++;
if(month>12) { //判断月份++以后是否大于12
year++; //大于12,年份加1
month-=12;//月份置为1
}
printf("10天后的时间为:\n%d-%d-%d",year,month,day);
}
return 0;
}
问题的解决方案如下:
根据参考资料中的原理介绍,十六进制转换为十进制需要先将十六进制数转换为二进制,再将二进制转换为十进制。根据参考资料的思路和代码示例,可以编写一个函数,输入一个十六进制数,输出相应的十进制数。
hexadecimal_decimal
,输入参数为一个字符串str
,表示十六进制数。hexadecimal_decimal
中,先获取字符串的长度,计算最后一位的索引length
,并定义变量sum
用于累加计算结果。a
。如果是数字,则直接将字符减去字符'0'得到数值;如果是大写字母,则将字符减去字符'A'再加上10;如果是小写字母,则将字符减去字符'a'再加上10。term
,使用公式term = a * pow(16, length - i)
,其中pow
是计算幂的函数。sum
中。sum
。main
函数中,获取用户输入的十六进制数,调用函数hexadecimal_decimal
进行转换,输出结果。下面是具体的代码实现:
#include <stdio.h>
#include <string.h>
#include <math.h>
void hexadecimal_decimal(char str[]);
int main() {
char string[1000];
printf("please enter a hexadecimal number: ");
gets(string);
hexadecimal_decimal(string);
return 0;
}
void hexadecimal_decimal(char str[]) {
int length = strlen(str) - 1;
int sum = 0;
int a, term;
for (int i = 0; i <= length; i++) {
if (str[i] >= '0' && str[i] <= '9')
a = str[i] - '0';
else if (str[i] >= 'A' && str[i] <= 'F')
a = 10 + (str[i] - 'A');
else if (str[i] >= 'a' && str[i] <= 'f')
a = 10 + (str[i] - 'a');
term = a * pow(16, length - i);
sum += term;
}
printf("The decimal number is: %d\n", sum);
}
你可以按照以下步骤来运行代码:
hex_to_decimal.c
。gcc -o hex_to_decimal hex_to_decimal.c -lm
-o
指定输出的可执行文件名为 hex_to_decimal
,-lm
用于链接 math.h 中的库函数 pow。./hex_to_decimal
注意:由于参考资料中的代码使用了gets
函数来获取用户输入,但该函数存在安全性问题并已被大多数编译器废弃,建议使用更安全的替代函数fgets
来获取用户输入。修改代码如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
void hexadecimal_decimal(char str[]);
int main() {
char string[1000];
printf("please enter a hexadecimal number: ");
fgets(string, sizeof(string), stdin);
// 去除输入字符串的换行符
string[strcspn(string, "\n")] = '\0';
hexadecimal_decimal(string);
return 0;
}
void hexadecimal_decimal(char str[]) {
int length = strlen(str) - 1;
int sum = 0;
int a, term;
for (int i = 0; i <= length; i++) {
if (str[i] >= '0' && str[i] <= '9')
a = str[i] - '0';
else if (str[i] >= 'A' && str[i] <= 'F')
a = 10 + (str[i] - 'A');
else if (str[i] >= 'a' && str[i] <= 'f')
a = 10 + (str[i] - 'a');
term = a * pow(16, length - i);
sum += term;
}
printf("The decimal number is: %d\n", sum);
}
运行该代码的步骤与之前相同。输入十六进制数时,以回车键结束输入。