首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个脚本,允许用户重复输入值,直到输入了每一种情况。

创建一个脚本,允许用户重复输入值,直到输入了每一种情况。
EN

Stack Overflow用户
提问于 2014-11-19 21:14:41
回答 1查看 44关注 0票数 0

我正在尝试创建一个脚本,允许用户重复输入x值,直到输入了每一种情况。我有三个可能的案例:

  • x <= 7时输入案例1
  • 7 <= x <= 12时输入案例2。
  • x > 12时输入案例3

我想使用一个while语句来出错--检查用户输入,确保x > 0。每次输入一个案例时,我都要打印案例编号&创建的y值:

  • 案例1的y = x^3 + 3
  • 案例2的y = (x-3)/2
  • 案例3的y = 4*x+3

任何案件都不能进行两次审理。如果发生这种情况,脚本将输出类似于“已运行的情况”之类的内容。一旦所有案例都被输入,我想打印类似于‘所有案例都被输入’的东西。

以下是我到目前为止尝试过的:

代码语言:javascript
复制
  counter1 = 0;
  counter2 = 0;
  counter3 = 0;
  while counter1==0 || counter2==0 || counter3==0
  x = input('Please enter an x value > 0: ');
  while x < 0
      x = input('Invalid! Please enter another x value > 0: ');
  end
  if counter1>=1 || counter2>=1 || counter3>=1
      disp('That case has been run already');
  elseif x<=7
      counter1 = counter1 + 1;
      y = x.^3 + 3;
      fprintf('Case 1: y = %d \n',y);
  elseif 7<x && x<=12
      counter2 = counter2 + 1;
      y = (x-3)./2;
      fprintf('Case 2: y = %d \n',y);
  elseif x>12
      counter3 = counter3 + 1;
      y = 4.*x+3; 
      fprintf('Case 3: y = %d \n',y);
  else counter1==1 && counter2==1 && counter3==1;
  end
  end
  disp('All cases have been entered!')

我现在唯一不能工作的就是这部分:

代码语言:javascript
复制
  if counter1>=1 || counter2>=1 || counter3>=1
      disp('That case has been run already');

它似乎完全被忽视了。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2014-11-19 21:33:23

去掉所有的counter变量。使用boolean / logical标志来指示何时执行了特定的情况。此外,您还需要检查每个案例本身是否已经执行了特定的案例。不要将其作为单独的外部if语句执行。这可能就是你最初写的那句话行不通的原因。就这样做这样的事。我将把%//NEW放在我添加了新代码的地方:

代码语言:javascript
复制
  case1 = false; %// NEW
  case2 = false; %// NEW
  case3 = false; %// NEW
  while ~case1 || ~case2 || ~case3 %// NEW: While at least one of the cases has not been run...
      x = input('Please enter an x value > 0: ');
      while x < 0
          x = input('Invalid! Please enter another x value > 0: ');
      end

      if x <= 7 %// NEW
         if case1 %// NEW: Check if case #1 has already been run
             %// If it has, show this to the user, then continue in the loop
             fprintf('Case #1 has already been run!\n');
             continue; %// NEW - Continue through the loop.  Don't do anything else
         end

         case1 = true; %// NEW - Set to true if we haven't run this case already
         y = x.^3 + 3;
         fprintf('Case 1: y = %d \n',y);

      elseif 7<x && x<=12
         if case2 %// NEW - Repeat like Case #1 here
            fprintf('Case #2 has already been run!\n'); %// NEW
            continue; %// NEW
         end

         case2 = true; %// NEW
         y = (x-3)./2;
         fprintf('Case 2: y = %d \n',y);

      elseif x>12
         if case3 %// NEW - Repeat like Case #3 here
             fprintf('Case #3 has already been run!\n'); %// NEW
             continue; %// NEW
         end

         case3 = true; %// NEW
         y = 4.*x+3; 
         fprintf('Case 3: y = %d \n',y);
       end %// End if
   end %// End while
   disp('All cases have been entered!') %// Display once all cases have been entered

下面是一个运行示例,说明它是有效的:

代码语言:javascript
复制
Please enter an x value > 0: -1
Invalid! Please enter another x value > 0: 3
Case 1: y = 30 
Please enter an x value > 0: 2
Case #1 has already been run!
Please enter an x value > 0: 8
Case 2: y = 2.500000e+00 
Please enter an x value > 0: 10
Case #2 has already been run!
Please enter an x value > 0: 14
Case 3: y = 59 
All cases have been entered!

我输入-1是为了看看它是否拒绝负数,这就是。我输入了一个数字< 7,是3,它成功地进入了第一个情况。我尝试输入另一个数字,即< 7,即2,它给出了这样的消息:第一种情况已经运行了。我试图输入一个介于7到12之间的数字.因此,我尝试8。它相应地生成案例#2。我用10再试一次,它说第二个案例已经运行了。最后,我尝试14,即> 12,它生成Case #3并停止,因为所有情况都已成功运行。

我相信这就是你要找的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27027113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档