c - 为什么我的程序编译但什么也不做?
问题描述
#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;
}
这个程序应该从用户那里获取一个输入,比如说一张信用卡,获取它的数字并将它们存储在一个数组中。该程序可以编译,但它甚至不会for
在主函数上打印循环......它只是要求输入。我究竟做错了什么?
解决方案
循环控制块中的第二个表达式for
是用于迭代的条件,而不是用于中断循环的条件。因此,这个for
循环...
for(int k = 0; k == digs; k++)
k
... 仅当等于时才执行循环体digs
,并且仅在第一次检查条件时才为真,仅当digs
为零时,您(合理地)不希望出现这种情况。此外,除非k
在循环体内部也进行了修改,它不在您的代码中,否则循环体永远不会执行超过一次。那么,它的效果类似于 to if (k == digs)
,当然循环体甚至不会执行一次。
您尝试做的事情的标准习语<
在条件中使用表达式:
for (int k = 0; k < digs; k++)
推荐阅读
- python - 在 python pandas 中合并数据的问题
- webpack - Webpack:将 JS 转换为 SASS 和 CSS
- c++ - C++ 内联构造函数和符号表
- javascript - 如何通过点击自动推进项目?
- java - 根据嵌套字段对 JSON 数据进行排序
- python - 类方法不会从另一个模块相互调用
- github-actions - Github Actions:如何在脚本中使用策略/矩阵
- flutter - 如何获取运行 Flutter Web 应用程序的设备的唯一标识符?
- android - 当视图被移除时,Android会暂停观察者
- javascript - 使用 ajax 以一种形式通过输入文件和文本发布