【发布时间】:2020-10-21 20:01:43
【问题描述】:
我试图了解指针的工作原理,但我不能把它放在一起。 当我再次遇到同样的问题时,我只是想知道如何继续。
这是一个程序,应该加两个不同的时间,但是读入、加和减必须在不同的函数中。
在函数内一切正常,但我无法将所有内容发送到 main()。
我已经尝试在函数的参数中实现指针,但是当我这样做时,一切都变得非常混乱,没有任何效果,所以我向您展示了我的代码的更简洁版本。
如果有人能帮助我理解我的理解,我将非常感激:)
PD:感谢您成为这样一个了不起的社区!
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
void subtracttimes (int hr0,int min0, int sek0, int hr1, int min1, int sek1, char op);
void addtimes ( int hr0, int min0, int sek0, int hr1, int min1, int sek1, char op );
char readin ();
int main( int hr0, int min0, int sek0, int hr1, int min1, int sek1, char op)
{
char op1;
op1 = readin ();
switch(op1){
case '+': addtimes (hr0, min0, sek0, hr1, min1, sek1, op);
break;
case '-': subtracttimes (hr0, min0, sek0, hr1, min1, sek1, op);
break;
}
return 0;
}
char readin ()
{
int hr0, min0, sek0;
int hr1, min1, sek1;
char c, op, *merker;
int ok;
printf("Time Calculator\n");
printf("================\n\n");
printf("Start time (hh:mm:ss): ");
ok = scanf("%d:%d:%d", &hr0, &min0, &sek0);
while((c = getchar()) != '\n' && c != EOF) {}
while ( ok != 3 || c != '\n' || hr0 > 23 || min0 > 59 || sek0 > 59) {
printf("Wrong input!\n");
printf("Start time (hh:mm:ss): ");
ok = scanf("%d:%d:%d", &hr0, &min0, &sek0);
while((c = getchar()) != '\n' && c != EOF) {}
}
printf("Second time (hh:mm:ss): ");
ok = scanf("%d:%d:%d", &hr1, &min1, &sek1);
while((c = getchar()) != '\n' && c != EOF) {}
while (ok != 3 || c != '\n' || hr1 > 23 || min1 > 59 || sek1 > 59) {
printf("Wrong input!\n");
printf("Second Time (hh:mm:ss): ");
ok = scanf("%d:%d:%d", &hr1, &min1, &sek1);
while((c = getchar()) != '\n' && c != EOF) {}
}
printf("Type of operation (+/-): ");
ok = scanf("%c", &op);
while((c = getchar()) != '\n' && c != EOF) {}
return op;
}
void addtimes ( int hr0, int min0, int sek0, int hr1, int min1, int sek1, char op )
{
int resultHour;
int resultMin;
int resultSec;
int resultDay = 0;
resultHour = hr0 + hr1;
resultMin = min0 + min1;
resultSec = sek0 + sek1;
if (resultSec > 59){
resultMin += 1;
resultSec -= 60;
} else if (resultMin > 59){
resultHour += 1;
resultMin -= 60;
} else if (resultHour > 23){
resultDay += 1;
resultHour -= 24;
}
printf("%02d:%02d:%02d %c %02d:%02d:%02d: = ", hr0, min0, sek0, op, hr1, min1, sek1);
if(resultDay==0) {
printf("%02d:%02d:%02d", resultHour, resultMin, resultSec);
} else if (resultDay>0) {
printf("%d Tag %02d:%02d:%02d", resultDay, resultHour, resultMin, resultSec);
}
}
void subtracttimes (int hr0, int min0, int sek0, int hr1, int min1, int sek1, char op)
{
int resultHour;
int resultMin;
int resultSec;
int resultDay = 0;
resultHour = hr0 - hr1;
resultMin = min0 - min1;
resultSec = sek0 - sek1;
if (resultSec <= 0){
resultMin -= 1;
resultSec = 60 - (sek1 -sek0);
} else if (resultMin <= 0){
resultHour -= 1;
resultMin = 60 - (min1 - min0);
} else if (resultHour <= 0){
resultHour = 60 - (hr1 - hr0);
}
printf("%02d:%02d:%02d %c %02d:%02d:%02d: = ", hr0, min0, sek0, op, hr1, min1, sek1);
printf("%02d:%02d:%02d", resultHour, resultMin, resultSec);
}
【问题讨论】:
-
首先,您不能像在托管环境中那样定义
main。它必须是int main(void)或int main(int argc, char* argv[])。如果您想通过命令行向应用程序传递值,则需要使用后者。 -
@FelixG 感谢您的回答。后者到底是什么意思?
-
我的意思是,如果您打算将值作为命令行参数传递给应用程序,您只需要
main的第二个变体。但既然这里似乎不是这样,int main(void)就足够了。
标签: c function pointers parameters arguments