【发布时间】:2018-02-06 14:38:14
【问题描述】:
我被困在 C 的分配上,我必须转换用户输入的儒略日期并将其转换为公历。当我运行它并为 Julian 日期输入一个数字时,它打印出来的月、日和年都是 1、0、-12。怎么修?我也没有完全理解指针,所以也许这就是问题所在?
#include <stdio.h>
#include <math.h>
void getDateFromJulian(double jd, int *month, int *day, int *year);
double getDoubleFromUser(char* msg);
int main() {
double jd = 0;
int month, day, year;
jd = getDoubleFromUser("Enter a valid Julian Day: ");
if (jd != -999.0) {
getDateFromJulian(jd, &month, &day, &year);
printf("Month, day, year is: %d, %d, %d \n", month, day, year);
}
return;
}
double getDoubleFromUser(char* msg){
int input;
int term;
//check for valid number
printf("Enter Julian Day: \n");
scanf_s("%1f%c");
if (scanf_s("%1f%c", &input, &term) != 2) {
if (term >= 0 * 41 && term <= 0 * (int)7) {
printf("That's not a valid number!\n");
return -999.0;
}
}
}
void getDateFromJulian(double jd, int *month, int *day, int *year) {
int A, B, C, D, E, alpha;
double Z, F;
int JD = 0;
F = modf(JD, &Z);
if (Z < 2299161) {
A = Z;
}
if (Z >= 2299161) {
alpha = (int)((Z - 1867216.25) / 36524.25);
A = Z + 1 + alpha - (int)(alpha / 4);
}
B = A + 1524;
C = (int)((B - 122.1) / 365.25);
D = (int)(365.25 * C);
E = (int)((B - D) / 30.6001);
day = B - D - (int)(30.6001 * E) + 0.5;
if (E < 14) {
month = E - 1;
}
if (E = 14 || 15) {
month = E - 13;
}
if (month > 2) {
year = C - 4716;
}
if (month = 1 || 2) {
year = C - 5715;
}
return;
}
【问题讨论】:
-
编译器应该在为函数中的指针分配数字而尖叫。注意你的编译器;它比你更了解 C。没错!
-
代码有这么多问题。从编译器获取帮助以消除一些警告/错误 - 然后返回代码。
-
写一点代码。测试一下。调试它。重复。
-
@Jones:请不要在事后编辑代码。它会使已发布的任何答案无效,并使未来的访问者感到困惑。
-
@Jones:您更改了指针分配,这是代码的主要问题之一。这使得 cmets 和对后来阅读问题的人的回答变得毫无意义。
标签: c