为什么我的程序可以编译但什么都不做?
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;
}
这个程序应该从用户那里获取输入,比如说一张信用卡,获取它的数字并将它们存储在一个数组中。该程序编译,但它甚至没有在 main 函数上打印 for
循环......它只是要求输入。我做错了什么?
for
循环控制块中的第二个表达式是迭代的条件,而不是退出循环的条件。因此,这个 for
循环 ...
for(int k = 0; k == digs; k++)
... 仅当 k
等于 digs
时才执行循环体,并且仅当 digs
为零时第一次检查条件时才为真,您(合理地)不希望出现这种情况。此外,除非 k
也在循环体内进行了修改(它不在您的代码中),否则循环体永远不会执行多次。它在效果上与 if (k == digs)
类似,当然循环体甚至不会执行一次。
您要执行的操作的标准习语在条件中使用 <
表达式:
for (int k = 0; k < digs; k++)
#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;
}
这个程序应该从用户那里获取输入,比如说一张信用卡,获取它的数字并将它们存储在一个数组中。该程序编译,但它甚至没有在 main 函数上打印 for
循环......它只是要求输入。我做错了什么?
for
循环控制块中的第二个表达式是迭代的条件,而不是退出循环的条件。因此,这个 for
循环 ...
for(int k = 0; k == digs; k++)
... 仅当 k
等于 digs
时才执行循环体,并且仅当 digs
为零时第一次检查条件时才为真,您(合理地)不希望出现这种情况。此外,除非 k
也在循环体内进行了修改(它不在您的代码中),否则循环体永远不会执行多次。它在效果上与 if (k == digs)
类似,当然循环体甚至不会执行一次。
您要执行的操作的标准习语在条件中使用 <
表达式:
for (int k = 0; k < digs; k++)