gpt4 book ai didi

c - 转到和代码重复 - 在这种情况下它们可以避免吗?

转载 作者:行者123 更新时间:2023-12-04 14:54:35 25 4
gpt4 key购买 nike

我最近遇到了一个编程问题,在我看来,最优化的解决方法是使用 goto,尽管这不是一个好习惯。问题是:告诉用户输入一个正自然数(> 0)并读取输入。如果此数字有效,请告诉用户该数字的平方。在输入正确时执行此操作。我想出了一些解决方案,但它们似乎都有问题。这里有两个:
解决方案 1 - 问题:使用 goto

#include <stdio.h>

int main()
{
int num;

_LOOP:
printf("Enter a positive natural number: ");
scanf("%i", &num);

if (num > 0) {
printf("Square: %i\n", num * num);
goto _LOOP;
}

printf("Invalid number\n");

return 0;
}

解决方案 2 - 问题:仔细检查 num > 0(代码重复)

#include <stdio.h>

int main()
{
int num;

do {
printf("Enter a positive natural number: ");
scanf("%i", &num);

if (num > 0)
printf("Square: %i\n", num * num);
} while (num > 0);

printf("Invalid number\n");

return 0;
}

显然,有更多的方法可以解决这个问题,但我想出的所有其他方法都没有使用 goto 来解决相同的代码重复问题。那么,是否有一种解决方案可以避免 goto 和代码重复?如果没有,我应该选择哪一个?

最佳答案

这是答案的一半;尝试填补缺失的内容。请记住,有时将循环构造为“做某事直到...”比“做某事时...”更好

    for (;;) {
printf("Enter a positive natural number: ");
scanf("%i", &num);
if (num <= 0)
break;
printf("Square: %i\n", num * num);
}
printf("Invalid number\n");

[更新@rdbo 的回答]

关于c - 转到和代码重复 - 在这种情况下它们可以避免吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68319519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com