问题请教谢谢大家

csdcc123 2020-06-27 10:33:54
刚学习,请详细解答,谢谢!

1、请问以下输入 2 执行后为什么一直是图1 的较果,一直在循环。
2、输入4 执行后是图2的较果。
3、执行顺序是怎么样的,应该注意些什么。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{

Console.WriteLine("选择5的阶乘");
Console.WriteLine("1、5!=5\n2、5!=20\n3、5!=40\n4、5!=60");
int a = int.Parse(Console.ReadLine());
switch (a)
{
case 1:
case 2:
case 3:
goto error;
case 4:
goto right;
default:
Console.WriteLine("选项不存在"); break;

}
error:
{
Console.WriteLine("计算错误");
}


right:
{
Console.WriteLine("正确");
}

Console.ReadLine();

}
}
}

图1:


图2:
...全文
5012 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在的问题是你要了解顺序结构,循环结构,分支结构是什么。你要理解goto跳转是干了什么事情.
回复
wanghui0380 2020-06-29
引用
你好,意思是 如果输入1,2,3 就 执行Console.WriteLine("计算错误"); -- >goto error-->Console.WriteLine("计算错误"); 这样就一直循环了是这样吗
对,因为外部条件没有变化。你那个变量a,没有发生改变,他永远触发error的跳转
回复
csdcc123 2020-06-29
引用 10 楼 csdcc123 的回复:
[quote=引用 9 楼 wanghui0380 的回复:]
计算机语言入门第一天,“所有计算机指令都是按顺序执行的”,if switch goto都是跳转指令

还理解不了。我们就不能用文字表达了,只能用场景和人类的想象力表达了

去年吴京的电影“攀登者”你看了把,人家爬到平台,雪崩又把他(goto)回去了,怎么办?只能在爬一遍

你这里一样,你自己把他吹回去了,他当然在爬回去。爬回去了,条件一样,你又把他吹回去了


你好,意思是 如果输入1,2,3 就 执行Console.WriteLine("计算错误"); -- >goto error-->Console.WriteLine("计算错误"); 这样就一直循环了是这样吗[/quote]

中间不再判断输入 ? case 1 case 2 case3是几了吗?
回复
csdcc123 2020-06-29
引用 9 楼 wanghui0380 的回复:
计算机语言入门第一天,“所有计算机指令都是按顺序执行的”,if switch goto都是跳转指令

还理解不了。我们就不能用文字表达了,只能用场景和人类的想象力表达了

去年吴京的电影“攀登者”你看了把,人家爬到平台,雪崩又把他(goto)回去了,怎么办?只能在爬一遍

你这里一样,你自己把他吹回去了,他当然在爬回去。爬回去了,条件一样,你又把他吹回去了


你好,意思是 如果输入1,2,3 就 执行Console.WriteLine("计算错误"); -- >goto error-->Console.WriteLine("计算错误"); 这样就一直循环了是这样吗
回复
wanghui0380 2020-06-29
计算机语言入门第一天,“所有计算机指令都是按顺序执行的”,if switch goto都是跳转指令 还理解不了。我们就不能用文字表达了,只能用场景和人类的想象力表达了 去年吴京的电影“攀登者”你看了把,人家爬到平台,雪崩又把他(goto)回去了,怎么办?只能在爬一遍 你这里一样,你自己把他吹回去了,他当然在爬回去。爬回去了,条件一样,你又把他吹回去了
回复
csdcc123 2020-06-29
引用 2 楼 是小明同学呀 的回复:
你这段代码的逻辑是这样的:
① 获取一个输入值,
② 如果值是1/2/3(执行代码块error->执行代码块right->等待键盘输入->结束)
如果值是4 (执行代码块right->等待键盘输入->结束)
如何是其他值(打印"选项不存在"->执行代码块error->执行代码块right->等待键盘输入->结束)

建议可以先画出流程图,根据流程图再选择合适的方法和语句来实现。
了解各个语句的作用和适用场景,会对学习编程有很大的帮助


如果是上面修改过的,执行顺序是怎么样的
回复
csdcc123 2020-06-29
引用 3 楼 极简吧 的回复:
你的代码逻辑根本就没有阶乘的操作,可以使用递归实现阶乘。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{

Console.WriteLine("选择5的阶乘");
Console.WriteLine("1、5!=5\n2、5!=20\n3、5!=40\n4、5!=60");
int a = int.Parse(Console.ReadLine());

error:
{
Console.WriteLine("计算错误");
}

switch (a)
{
case 1:
case 2:
case 3:
goto error;
case 4:
goto right;
default:
Console.WriteLine("选项不存在"); break;

}

right:
{
Console.WriteLine("正确");
}

Console.ReadLine();

}
}
}


写错了,应该是这样的,为什么会有前图中的效果
回复
EdsionWang 2020-06-28
直接switch case就可以控制的了的流程,goto是顺序执行的,不会往回走的
回复
圣殿骑士18 2020-06-28
复制了你的代码,执行,输入4,结果并不如你所说,而是
回复
说两个编程基本问题吧:

第一,任何一个小的过程要有完整的逻辑,要以测试为准而不是以自己的意淫为准。你的 error 语句块儿部分(只有一行代码)执行完毕就是紧跟着执行 right 语句块儿部分的,这是你的原本的逻辑设计吗?如果不是,那么error 执行完 WriteLine 之后应该执行到哪里,要给出具体的流程控制,不能在还没有写完 error 语句块儿流程时就把注意转移到其它地方去找别的问题。

第二,要学习结构化编程思路,学编程要首先会画最初级的“流程图”。你画个流程图就能知道思维是否混乱,而不会连思路都理不顺就急急忙忙动手写什么高大上的代码。

从结构化角度讲,使用 goto 语句通常只是向前跳转而不去向后跳转。因为向后跳转 goto 语句流程非常混乱,所以通常这里使用 switch、if....else、do....while 等结构化控制语句来直接对应控制流图,而不是用 goto 语句。使用 goto 只用于向前跳转到固定的循环入口这一种方式,最简单的时候才用 goto,否则就用更清晰的控制流语句。
回复
guwei4037 2020-06-27
你的代码逻辑根本就没有阶乘的操作,可以使用递归实现阶乘。
回复
你这段代码的逻辑是这样的: ① 获取一个输入值, ② 如果值是1/2/3(执行代码块error->执行代码块right->等待键盘输入->结束) 如果值是4 (执行代码块right->等待键盘输入->结束) 如何是其他值(打印"选项不存在"->执行代码块error->执行代码块right->等待键盘输入->结束) 建议可以先画出流程图,根据流程图再选择合适的方法和语句来实现。 了解各个语句的作用和适用场景,会对学习编程有很大的帮助
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2020-06-27 10:33
社区公告

让您成为最强悍的C#开发者