gpt4 book ai didi

for-loop - 为什么下面这段代码在GO语言中的输出是错误的

转载 作者:IT王子 更新时间:2023-10-29 01:45:05 26 4
gpt4 key购买 nike

这是我为实现堆栈而编写的代码。当我执行它时,它会完全生成一些不同类型的输出。附上输出截图。为什么程序会生成这样的无效输出?代码有没有错误?

package main

import "fmt"

var st [100]int
var top int

func main() {
top = -1
ch := 0
temp := 0
for true {
fmt.Println("Enter you choice:")
fmt.Println("1. PUSH\n2. POP\n3. PRINT\n4. EXIT")
fmt.Scanf("%d", &ch)
switch ch {
case 1:
fmt.Println("Enter the value...")
fmt.Scanf("%d", &temp)
push(temp)
case 2:
temp = pop()
if temp != -1 {
fmt.Println("The popped value is ", temp)
}
case 3:
print()
case 4:
break
default:
fmt.Println("Please enter a valid choice")
}
}
}

func print() {
i := 0
if top == -1 {
fmt.Println("First insert elements into the stack")
} else {
fmt.Printf("The values are as follows")
for i <= top {
fmt.Println(st[i])
i++
}
}
}

func pop() int {
if top == -1 {
fmt.Println("Please push values before popping")
return -1
}
temp := st[top]
top--
return temp
}

func push(n int) {
top++
st[top] = n
}

输出的屏幕截图:

enter image description here

最佳答案

问题是您希望它像您输入一个值并按 Enter 生成换行符一样工作,然后您尝试使用 fmt.Scanf() 扫描它.引用其文档:

Newlines in the input must match newlines in the format.

所以如果你想使用fmt.Scanf(),格式字符串必须包含一个换行符\n。但是因为你的没有,换行符不会被消耗,所以下一行读取值将自动继续。

简单修复:将 \n 添加到格式字符串中:

fmt.Println("Enter you choice:")
fmt.Println("1. PUSH\n2. POP\n3. PRINT\n4. EXIT")
fmt.Scanf("%d\n", &ch)

和:

fmt.Println("Enter the value...")
fmt.Scanf("%d\n", &temp)

另一种方法是简单地使用 fmt.Scanln()自动解析整行:

fmt.Println("1. PUSH\n2. POP\n3. PRINT\n4. EXIT")
fmt.Scanln(&ch)

// ...

fmt.Println("Enter the value...")
fmt.Scanln(&temp)

此外,fmt.Scanf()fmt.Scanln() 返回成功扫描值的数量和错误。请务必检查这些以查看扫描是否成功。

代码中的另一个错误是退出功能:您在 case 4 分支中使用了 break 语句。 break 只会中断 switch 而不是 for!所以使用 return 而不是 break:

    case 4:
return

另一个修复可能是使用标签,还要注意 for true { ... } 等同于 for { ... } (您可以省略 ):

mainloop:
for {
// ...
switch ch {
// ...
case 4:
break mainloop
// ...
}
}

关于for-loop - 为什么下面这段代码在GO语言中的输出是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39544022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com