我这个哪里出了问题呀,一在输入的时候输入例如斜杠,就会出现错误,而且计算的天数与我输入的天数相等,并没有计算定义的函数里的天数的计算公式啊
day已经是参数了,在函数里又被当作了统计有多少天的变量,这是不对的
printf("一共有%d天", day_of_year(year, month, day)); 就可以了,你多了一个 day
在scanf输入的时候要按照你设置的%d%d%d的形式输入
供参考:
分析:
int main()
{
float a[5];
float* p;
for (p = &a[5]; p >= &a[0];)
{
*--p = 0;
}
return 0;
}
改进:
for (p = &a[4]; p >= &a[0]; p--)
{
*p = 0;
}
指针 -- 地址
数组 -- 一组相同类型的数据
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//arr首元素地址
int* p = arr;
int i = 0;
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%p == %p \n", p + i,&arr[i]);
}
return 0;
}
分析:
int arr[10] = {1,2,3,4,5,6,7,8,9,0};int *p = arr;//p存放的是数组首元素的地址
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
int* p = arr; //指针存放数组首元素的地址
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("&arr[%d] = %p <====> p+%d = %p\n", i, &arr[i], i, p + i);
}
return 0;
}
所以 p+i 其实计算的是数组 arr 下标为i的地址
int main()
{
int a = 10;
int* pa = &a;
int** ppa = &pa; //ppa就是一个二级指针
**ppa = 20;
printf("%d\n",a);
return 0;
}
该问题很可能是因为输入的特殊字符被误认为是日期的一部分了,导致计算出来的日数与输入的日数相等。解决方法是在输入时对特殊字符进行处理,将其过滤掉或者替换掉。具体方法可以在输入的时候使用读取字符串的函数(比如fgets或者scanf)读取整个字符串,然后对字符串进行遍历,遇到特殊字符时将其替换为空格或者去掉该字符。将处理好的字符串传入日期计算函数即可正确计算日期。以下是示例代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int day_of_year(int year, int month, int day);
int main()
{
int year, month, day;
char buf[256];
printf("请输入日期:");
fgets(buf, sizeof(buf), stdin);
// 遍历字符串,将特殊字符替换为空格
for (int i = 0; i < strlen(buf); i++) {
if (!isdigit(buf[i])) {
buf[i] = ' ';
}
}
// 解析年、月、日
sscanf(buf, "%d%d%d", &year, &month, &day);
int days = day_of_year(year, month, day);
printf("该日期是本年第%d天", days);
return 0;
}
int day_of_year(int year, int month, int day)
{
// 检查日期是否合法
if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31) {
return -1;
}
// 计算每个月的天数
int days[2][12] = {
{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31},
};
// 判断是否是闰年
int leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
// 计算天数
int total = 0;
for (int i = 0; i < month - 1; i++) {
total += days[leap][i];
}
total += day;
return total;
}