我正试图通过遵循一个教科书来学习基本C编程,而且我肯定遗漏了一些关于数据类型、舍入和/或操作顺序的东西,因为当我试图构建一个简单的程序来将秒转换为小时和分钟时,时间是工作的,而其余的分钟则是0,而它们不应该工作。
感谢古瑟拉,我知道这样的程序存在巨大的安全漏洞,但为了学习目的,我将要求您忽略安全性。目前,这些书希望我坚持使用printf、scanf和while循环,因为它们与我正在阅读的教科书的章节相对应(这些书让我知道,当我再读几章的时候,我就会开始担心安全性)。
我的C程序如下所示:
/* Ask the user for a number of seconds, convert to X hours and Y minutes */
/* Continue doing this with a while loop until user enters 0 */
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void)
{
    const int minperhour = 60;
    const int secpermin  = 60;
    int sec, hr;
    float min;
    sec = 1;
    while(sec != 0)
    {
        printf("Enter the number of seconds to convert: \n");
        scanf("%i", &sec);
        min = sec/secpermin;
        hr  = min/minperhour;
        min = (sec/secpermin) - (hr * minperhour);
        printf("%d hours and %f minutes \n", hr, min);
    }
    return 0;
}我希望能够输入3601,结果是:
1 hours and 0.01667 minutes
因为这是在R语言中计算表达式的方式,我对此比较熟悉:
> min = 3601/60
> min
[1] 60.02
> hr = min/60
> hr
[1] 1
> min = (3601/60) - (1 * 60)
> min
[1] 0.01667然而,我在C中得到的是:
C:\Users\hackr>pa2q3.exe
Enter the number of seconds to convert:
3601
1 hours and 0.000000 minutes
Enter the number of seconds to convert:
7205
2 hours and 0.000000 minutes
Enter the number of seconds to convert:
0
0 hours and 0.000000 minutes
C:\Users\hackr>我投了7205的第二次尝试只是为了好的措施。
我有一种感觉,在堆栈溢出的一些你C大师可以使用更先进的技术,以更简洁的形式编写程序的安全版本。这可能也是教育,如果你想提到它,但首先,我需要了解发生了什么与这个简单的程序。
发布于 2015-05-06 14:38:24
整数除法:除以两个整数后的整数值以浮点格式存储。例:
 float a = 3/5;在这里,3和5之间将发生整数除法,从而导致0。现在,如果您尝试将这个0存储在一个float变量中,它将被存储为0.00。
    min = sec/secpermin;应该是
    min = (float)sec/secpermin;或
    min = sec/(float)secpermin;或者,正如@alk所指出的,您也可以这样做:
    min = sec;     
    min /= secpermin;    // min=min/secpermin;   here, typecasting is not required as 
                        // numerator (min) is already float.或者,您可以将它们全部设置为float,并将它们打印为int。
https://stackoverflow.com/questions/30079850
复制相似问题