首页 > 解决方案 > C for循环,如何不断提示用户?

问题描述

我正在学习诸如 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;
    }
}

标签: cloopsfor-loop

解决方案


正如其他用户所解释的那样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;

另请注意,我添加\n了一些printf()命令以获得更好的可视化效果。


推荐阅读