繁体   English   中英

为什么我的程序编译但什么也不做?

[英]Why does my program compile but not do anything?

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int * get_digs(long card, int digs, int idigs[]);

int main()
{
    long card = get_long("Number: ");
    int digs = ceil(log10(card));
    int idigs[digs];

    get_digs(card, digs, &idigs[digs]);

    for(int k = 0; k == digs; k++) // This loop is to check if the program is doing what I'm 
    {                              // asking it to do.
        printf("%i", idigs[k]);
    }
}

int * get_digs(long cd, int dg, int idg[])
{
    int j = dg;
    int dig = 0;

    for(int i = 0; i == dg; i++)
    {
        dig = floor(cd / pow(10, j));
        j--;
        idg[i] = dig % 10;
    }
    return 0;
}


这个程序应该从用户那里获取一个输入,比如说一张信用卡,获取它的数字并将它们存储在一个数组中。 该程序编译,但它甚至不打印主 function 上的for循环......它只是要求输入。 我究竟做错了什么?

for循环控制块中的第二个表达式是用于迭代的条件,而不是用于中断循环的条件。 因此,这个for循环...

 for(int k = 0; k == digs; k++)

...仅当k等于digs时才执行循环体,并且仅当digs为零时才第一次检查条件时才为真,您(合理地)不希望出现这种情况。 此外,除非k也在循环体内被修改,它不在你的代码中,否则循环体永远不会执行超过一次。 那么,它的效果类似于if (k == digs) ,当然循环体甚至不会执行一次。

您尝试执行的操作的标准习语在条件中使用<表达式:

    for (int k = 0; k < digs; k++)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM