【发布时间】:2020-10-03 17:57:12
【问题描述】:
下面是一个带有默认 else 条件的 Python 素数程序。我想在 C 中重现它,但我没有让它像 Python 一样工作:
for ix, num_float in enumerate(numbers):
num = int(num_float)
result = 0
if num > 1:
for i in range(2,num):
if (num % i) == 0:
result = 0
out_array.append(result)
break
else:
result = num
out_array.append(result)
else:
result = 0
out_array.append(result)
在 Python 中,如果 (a) 输入数字 (num) 小于或等于 2,或 (b) 它到达 2,num 范围的末尾而没有找到素数,则默认(最终)else 条件触发,这触发 break 语句。
我用 C 复制了这个;它编译并运行,它与预期的输出非常匹配,但并不相同。它不写默认条件。
for (int i = 0; i < numbers_length; i++){
num = (int64_t)numbers[i];
int range_ctr;
if (num > 1){
for (range_ctr = 2; range_ctr < num; range_ctr++){
if ((num%range_ctr) == 0){
result = 0;
list_of_results[list_of_results_ctr] = result;
list_of_results_ctr++;
break; }
else if ((num%range_ctr) != 0){
result = num;
list_of_results[list_of_results_ctr] = result;
list_of_results_ctr++; }
else {
result = 0;
list_of_results[list_of_results_ctr] = result;
list_of_results_ctr++; }
}
}
}
所以我的问题是,如上所述,我怎样才能像 Python 一样用 C 语言编写默认条件?
谢谢。
【问题讨论】:
-
输出有什么区别?
-
在默认情况下应该写零的地方不写。
-
我实际上从未听说过 C 语言中的
for-else。我不确定将这种心态强加到 C 代码中是否是个好主意,因为我不确定其他 C 开发人员会如何应对它。 -- 当然我没有回答你的问题,但这只是一个评论。 -
您也应该避免在 Python 中使用 loop-else。据称,BDFL Guido van Rossum wishes the feature had not been added.
-
测试“我的循环是否提前中断?”的典型选项循环完成后,a) 测试循环计数器的最大可能值,b) 测试代码中设置的标志,该标志提前退出循环。
标签: c