【问题标题】:How to count iteration on a loop如何计算循环上的迭代
【发布时间】:2015-06-21 18:16:53
【问题描述】:

我正在自学 C 循环,我想知道用户如何只尝试 密码 3 次

当第一次正确时它返回正确,我当前的循环没有达到预期的效果。

int password = 8795, guessed = 3;

while(1) {

    printf("\n\n");
    printf("Please Enter Your Password");
    scanf ("%d ", &guessed);

    if (guessed == password ) {
        printf("Correct Password");
    } else if(guessed != password) {
        printf("Please try again for the second time");
    } else {
        printf("Please try again for the last time");
        break;
    }
}

【问题讨论】:

  • 试试 while (guessesLeft > 0) 并在 while 循环中将guessesLeft 的值减一。
  • 密码单词,还是密码代码?注意:请改进代码的格式!
  • @KIM 先看看我的答案,然后再选择最好的。:)

标签: c loops while-loop


【解决方案1】:

要在 C 中循环 n 次,请使用 for 循环:

for(int i = 0; i < n; i++) {
  /* loop contents */
}

在这种情况下,将n 替换为 3。但是,在您的情况下,按照@Michiel Uit Het Broek 的建议阅读代码并使用 while 循环会更有意义:

int guessesLeft = 3;
while(guessesLeft > 0) {
  /* loop contents */
  guessesLeft--;
}

要在密码正确的情况下退出循环,请使用break

if(guessed == password) {
  break;
}

【讨论】:

  • 这就是我所做的 int password = 8795, guessed = 3;整数试验= 0; while(1){ printf("\n\n"); printf("请输入您的密码"); scanf("%d", &guessed);试验——; if (猜测 == 密码){ printf("正确密码");休息; } if(试验 ==3){ printf("\n\n"); printf("试验次数太多");休息; }
  • @KIM:如果你想那样做,你需要把trials--改成trials++trials 从 0 开始,所以它必须增加,否则永远不会达到 3。
  • 谢谢,这很有帮助。
【解决方案2】:

我认为你的意思是以下

int password = 8795, guessed;
int attempts = 3;
int valid = 0;

printf("\n\n");
printf("Please Enter Your Password");
do
{
    scanf ("%d ", &guessed);
    --attempts;

    if ( valid = guessed == password )
    {
        printf("Correct Password");
    }
    else if( attempts != 1 )
    {
        printf("Please try again for the second time");
    }
    else
    {
        printf("Please try again for the last time");
    }
} while ( !valid && attempts != 0 );

【讨论】:

  • 这不是他的意思。如果输入的密码比密码多一,则此代码声明输入的密码有效。它也不限制您尝试 3 次。
  • 如果用户输入 1 也会中断循环。
  • @Linuxios 我什么都不懂。这是一个有效的代码。怎么了?!
  • 我认为您混淆了“猜测”和“猜测”。另外,忘记声明这两个中的一个。再次阅读您的代码。
  • @folkol 是的,我搞混了,因为作者问了三个尝试。
【解决方案3】:

我不会将guessed 初始化为 3,而是添加一个新变量,可能称为 requests_left 并将其初始化为 4。您的guessed 变量会被用户输入覆盖。

你的 if、else、else 永远不会到达最后一个 else。您的第一个 else 不需要任何 if 条件,因为它的当前条件与 if 行的条件相反。

您可能想要while(--attempts_left&gt;0) 之类的东西,而不是while(1)。您可能不希望在最后一个 else 中有任何中断,而是您可能希望在密码正确时中断 while 循环。在 while 循环之外,您可能需要检查 while 循环是否因为密码正确或用户重试次数不足而结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2016-12-01
    • 2011-09-07
    相关资源
    最近更新 更多