红联Linux门户
Linux帮助

c语言问题

发布时间:2013-01-04 23:30:56来源:红联作者:micy1985
题目: 从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。

本人编写的源代码:
#include
#include


int main(void)
{
struct time {
int h;
int m;
int s;
} gap;
int gapsec;

int get_sec(void);

gapsec = get_sec();
gapsec -= get_sec();
gapsec = (gapsec >= 0) ? gapsec : -gapsec;

gap.h = gapsec / 3600, gapsec %= 3600;
gap.m = gapsec / 60, gapsec %= 60;
gap.s = gapsec;
printf("%d:%d:%d\n", gap.h, gap.m, gap.s);

return 0;
}

int get_sec(void)
{
int i, j, totalsec = 0;
char a[20], h[5], m[5], s[5], c;

for (i = 0; (c = getchar()) != '\n'; i++)
a[i] = c;
a[i] = '\0';
for (i = 0, j = 0; a[i] != ':'; i++, j++)
h[j] = a[i];
h[j] = '\0';
totalsec = atoi(h) * 3600;
for (i++, j = 0; a[i] != ':'; i++, j++);
m[j] = a[i];
m[j] = '\0';
totalsec += atoi(m) * 60;
for (i++, j = 0; a[i] != '\0'; i++, j++);
s[j] = a[i];
s[j] = '\0';
totalsec += atoi(s);
return totalsec;
}

问题:此代码在64位ubuntu(12.04)上能编译通过,但当通过gdb调试时,get_sec函数中的数组m和s却无法写入相应的数据,结果很诡异,希望哪位大哥能帮忙解释下,小弟在此拜过!
文章评论

共有 5 条评论

  1. angellove24h 于 2013-02-19 20:33:22发表:

    学习了

  2. tensen1533 于 2013-02-19 17:21:14发表:

    看不懂韩国

  3. 劲舞青春 于 2013-02-19 17:11:49发表:

    这个我喜欢

  4. 于 2013-01-21 14:50:41发表:

    首先 我不知道是显示问题还是怎么回事,你以下代码就有问题
    char a[20], h[5], m[5], s[5], c;

    for (i = 0; (c = getchar()) != '\n'; i++)
    a = c;
    a = '\0';

    a是一个地址哦,估计应该写成a[i] = c;还有就是如果写成这样的话,最好这个写成这样 for (i = 0; (c = getchar()) != '\n',i

  5. 759040024 于 2013-01-05 16:56:52发表:

    受教了 新手