【问题标题】:C for loop, How do I continuously prompt the user?C for循环,如何不断提示用户?
【发布时间】:2020-06-04 16:52:55
【问题描述】:

我正在学习诸如 for 和 while 循环之类的循环,因此我决定自己进行测试并编写一个程序,您可以在下面看到代码。该程序为用户提供了一系列选项来输入选项,但我遇到的问题是我希望能够在操作完成后不断要求用户“输入命令”。

例如,如果我输入 1,则将执行必要的代码,但整个程序就结束了。如何增强此程序,使其不断要求用户输入新命令,直到用户输入 0 强制退出?

#include <stdio.h>

int main()
{
    int n;
    int credit = 0;
    int YN;

    printf("Welcome to Cash booking software Version 2.145\n");
    printf("--------------------------------------------------------\n");

    printf("Use the following options:\n");
    printf("0 -- Exit\n");
    printf("1 -- Display Credit\n");
    printf("2 -- Change Credit\n");
    printf("3 -- Remove Credit\n");

    printf("\n");

    for ( ; ; )
    {
        printf("Enter a command: ");
        scanf("%d", &n);

        if (n == 0)
        {
            return 0;
        }
        else if (n == 1)
        {
            printf("Your credit is £%d", credit);
        }
        else if (n == 2)
        {
            printf("Enter a new credit value: \n");
            scanf("%d", &credit);
            printf("Your new credit value is %d", credit);
        }
        else if (n == 3)
        {
            printf("Are you sure you want to remove your Credit value? (Y=1/N=2)");
            scanf("%d", &YN);
            if (YN == 1)
            {
                credit = 0;
            }
            else
                ;
        }

        return 0;
    }
}

【问题讨论】:

  • 由于您仍然熟悉该语言,我强烈建议习惯使用它的一些最常用的工具:对于这种情况,它是调试器。如果您在终端中运行程序,则可以使用 gdb。如果您使用的是 IDE,例如 VS Code,它们通常集成了调试器。使用调试器,您将能够一步一步地看到程序在做什么。
  • 我认为你的情况很好,错误可能是 return 0; 应该在 for 循环之外的 } 之后(即像你想要的那样无限循环)。所以把 return 放在最后一个 } 之前应该没问题。
  • 当代码格式整齐时,最终return 0;for循环内而不是在它之后的错误变得明显。将其移出循环,您的循环将继续。
  • 最好使用调试器或正确格式化代码,但不像初学者那么容易,所以我们必须让他犯一些错误:) 并花一些时间在上面。就像我们每个人一样! :)
  • 谢谢大家的帮助!!!!!!

标签: c loops for-loop


【解决方案1】:

正如其他用户所解释的 return 0; 循环内部是导致问题的原因,将其移出将解决它,但是由于您正在学习循环,我认为这是一个很好的例子来教您一些东西。

通常,当您有一些定义循环执行次数的参数时,您应该只使用 for 循环。您刚刚使用for( ; ; ) 的事实是一个巨大的危险信号,这是一个更好的方法。

例如,在 c 中编写无限循环的正确方法是 while(1){//code in the loop}。所以你可以用这个改变你的for循环,它会正常工作(将return 0;重新定位到正确的位置)。

但是由于在这段代码中你并不真正想要一个无限循环(通常它们是一个坏主意),但你希望循环一直运行直到按下 0,最好的解决方案是在里面使用 do{} while(); 循环在do 中,您检查是否按下了 1、2 或 3 并执行它们的功能,然后在 while 条件下检查是否按下了 0,只有在这种情况下程序才会退出。

这就是代码的样子:

do{
  printf("Enter a command: ");
  scanf("%d", &n);
  if (n == 1){
    printf("Your credit is £%d\n", credit); // \n added
  }
  else if (n == 2){
    printf("Enter a new credit value: \n");
    scanf("%d", &credit);
    printf("Your new credit value is %d\n", credit); // \n added
  }
  else if (n == 3){
    printf("Are you sure you want to remove your Credit value? (Y=1/N=2):");
    scanf("%d", &YN);
    if (YN == 1){
      credit = 0;
    }
  }
} while(n != 0);
return 0;

另请注意,我在一些printf() 命令中添加了\n 以实现更好的可视化。

【讨论】:

  • 感谢这个惊人的答案,但我有一个问题,当你说 while 循环在这种情况下是一个更好的选择时,这不是不正确的,因为 while 循环和 for 循环正是相同,但 for 循环在一行上的结构不同。
  • 嗯,是的,我的意思是 while(1) 更合适,因为在空的 for 循环中,您没有使用使 for 循环与 while 不同的特性,因为没有反每次迭代都会更新,但是是的,从性能级别来看,它们做同样的事情。
  • 但我也不建议您将 for 循环视为 while 的简洁形式,因为大多数情况下它的使用完全不同。在 for 循环中,您的索引在每次迭代时都会增加(或减少),直到某个值达到定义的值。另一方面,while 循环更加灵活,如果不需要,您不必在每次迭代时修改索引,并且您可以轻松地在循环中使用多个条件。
【解决方案2】:

在每个条件的末尾使用 continue 语句,您可以使用 break 语句代替 return 0,所以代码将是:

    if (n == 0)
    {
        break;
    }
    else if (n == 1)
    {
        printf("Your credit is £%d ", credit);

        continue;
    }
    else if (n == 2)
    {
        printf("Enter a new credit value: \n");
        scanf("%d", &credit);
        printf("Your new credit value is %d ", credit);

        continue;
    }
    else if (n == 3)
    {
        printf("Are you sure you want to remove your Credit value? (Y=1/N=2) : ");
        scanf("%d", &YN);
        if (YN == 1)
        {
            credit = 0;
            continue;
        }
        else {
            continue;
        } 

【讨论】:

  • 移动'return 0;'在 for 循环之外会是一种更简单的解决方案。
猜你喜欢
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多