首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复具有多个返回错误的条件的while循环

如何修复具有多个返回错误的条件的while循环
EN

Stack Overflow用户
提问于 2013-04-12 04:08:55
回答 1查看 4K关注 0票数 4

我已经写了代码,要求用户输入"2012“或"2013”。然后我有一个while循环检查,看看用户输入的是2012还是2013。

输入有效年份的请求将一直持续到用户输入有效数字为止。但是,我一直收到一个错误,表示发生了意外的"{“。我找不到为什么这会在我的代码中产生这样的错误。

代码如下:

代码语言:javascript
复制
yr_function <-function(){
   year_of_data <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
}

year_of_data = 0
While((year_of_data != 2012) | (year_of_data != 2013)){
    yr_function
if(year_of_data != (2012 | 2013),print("You must type either 2012 or 2013")
}

生成的错误如下:

代码语言:javascript
复制
Error: unexpected '{' in "While((year_of_data != 2012) | (year_of_data != 2013)){"

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-12 11:13:00

您已经掌握了本应是一般概念的框架,但是在一些地方,您已经被一些简单的错误所绊倒。下面是一个带注释的版本,它按照您的描述工作:

代码语言:javascript
复制
yr_function <-function(){
   res <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
   if (is.na(res)){
    res <- -1
   }
   res
}

你首先遇到的问题之一就是作用域。您在此函数内部和while循环之前都定义了year_of_data。但是在函数内部创建的变量不会引用while循环之前的变量。它们存在于不同的环境中。所以我修改了这个函数,改为返回用户输入的值。

您没有过多地讨论验证,这是一个重要的话题。我在这里添加了一些非常小的验证。基本上,如果用户输入一些不能合理地强制转换为数字的内容,那么您将获得安娜的值,这将是一个令人头疼的问题。所以我只是简单地检查一下,在这种情况下返回-1。这并不是验证问题的完整解决方案。

代码语言:javascript
复制
year_of_data <- 0
while((year_of_data != 2012) & (year_of_data != 2013)){
    year_of_data <- yr_function()
    if (!year_of_data %in% c(2012,2013)){
        print("You must type either 2012 or 2013")
    }else{
        break
    }
}

下面是修复后的while循环。首先,我修复了一些简单的语法错误(它是while,而不是While,等等)。然后,我将yr_function()的结果赋值给year_of_data,这样我们就可以检查结果值并执行相应的操作。

您尝试的if条件(year_of_data != (2012 | 2013))在语法上不正确,因此我切换到检查值是否包含在向量c(2012,2013)中。

最后,在if后面加上一个逗号,然后是一条print语句。逗号是另一个语法错误。因此,我在print语句两边添加了大括号,并添加了一个else子句,如果用户输入了正确的内容,该子句就会中断while循环。

更一般的情况下,您可能希望研究这类任务的函数menu。这可能会使验证问题变得更容易处理。

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

https://stackoverflow.com/questions/15957949

复制
相关文章

相似问题

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