Golang中if else语句的使用问题求助

Golang中if else语句的使用问题求助 下午好,

我刚开始接触编程,写了一个简单的程序来计算基于用户输入的值。目标是当输入小于等于12时执行特定计算,大于12时执行不同计算。

程序已经可以运行,但存在一个问题:没有考虑用户输入字符的情况。例如,如果用户输入"hello",程序就直接关闭了。我想实现的是:如果用户输入hello,程序输出"请输入有效数字",然后重复这个过程直到获得有效数字。

我该如何实现这个功能?

以下是我目前的代码:

package main

import (
"fmt"
"os"
"bufio"
)

func main(){
	var value float64
	fmt.Println("Enter the value: ")
	fmt.Scanln(&value)
	if value <=12{
		fmt.Println(value*4.3 + 18)
	} else{
		fmt.Println(value*5.0 + 9.7)
	}
	fmt.Println("Press 'Enter' to exit program...")
    bufio.NewReader(os.Stdin).ReadBytes('\n') 
}

更多关于Golang中if else语句的使用问题求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html

8 回复

这真是太完美了!非常感谢您的帮助!

更多关于Golang中if else语句的使用问题求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个方法有效,但会终止程序。有没有办法将其转换为循环,以便持续要求用户输入直到输入数字为止?

可以获取Scanln返回的错误。例如

if _, err := fmt.Scanln(&value); err != nil {
fmt.Println(err)
}
// 没有错误,

当然可以!以下是转换后的Markdown内容:

okFlag := true
for okFlag {
    ...
    if _, err := fmt.Scanln(&value); err != nil {
        okFlag := false;
        break;
    }
    // 无错误
}

这个方案几乎可行…我测试了一下,输入了34gy4q4

结果是:

35.2 按"Enter"键退出程序…

如果我输入的内容以字母结尾,循环会重复执行;但如果以数字结尾,它似乎会读取最后连续的数字并在if语句中处理这些数字。

确实如此,我忽略了这一点。你可以通过扫描字符串并显式解析为浮点数来避免这个问题,如下所示:

func main() {
	var s string
	var value float64
	fmt.Println("Enter the value: ")
	for {
		_, err := fmt.Scanln(&s)
		if err == nil {
			value, err = strconv.ParseFloat(s, 64)
			if err == nil {
				break
			}
		}
	}
	if value <= 12 {
		fmt.Println(value*4.3 + 18)
	} else {
		fmt.Println(value*5.0 + 9.7)
	}
}

这是错误的,该标志是不必要的,而且你是在错误时中断,而不是在成功时中断。

你可以使用 ScanlnScanf 来指定需要浮点数,例如:

func main() {
	var value float64
	fmt.Println("Enter the value: ")
	for {
		_, err := fmt.Scanln(&value)
		//这个方法也可以
		//_, err := fmt.Scanf("%f", &value)
		if err == nil {
			break
		}
	}
	if value <= 12 {
		fmt.Println(value*4.3 + 18)
	} else {
		fmt.Println(value*5.0 + 9.7)
	}
}

你可以通过循环读取输入并验证输入是否为有效数字来实现这个功能。以下是一个改进的版本,它会持续提示用户直到获得有效的数字输入:

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var value float64
	var input string
	var err error

	for {
		fmt.Println("Enter the value: ")
		input, err = reader.ReadString('\n')
		if err != nil {
			fmt.Println("读取输入时出错:", err)
			continue
		}

		input = strings.TrimSpace(input)
		value, err = strconv.ParseFloat(input, 64)
		if err != nil {
			fmt.Println("请输入有效数字")
			continue
		}
		break
	}

	if value <= 12 {
		fmt.Println(value*4.3 + 18)
	} else {
		fmt.Println(value*5.0 + 9.7)
	}

	fmt.Println("Press 'Enter' to exit program...")
	bufio.NewReader(os.Stdin).ReadBytes('\n')
}

这个改进版本的主要变化:

  1. 使用 bufio.NewReader 读取整行输入
  2. 使用 strings.TrimSpace 去除输入中的换行符和空格
  3. 使用 strconv.ParseFloat 尝试将输入转换为浮点数
  4. 通过循环持续提示,直到获得有效输入

当用户输入非数字时,程序会显示"请输入有效数字"并继续等待输入,只有获得有效数字后才会执行计算逻辑。

回到顶部