Почему неправильное сравнение с switch case? [закрыто]

Вопрос или проблема

package main

import "fmt"

func main() { 
    var n1, n2 int 
    fmt.Scanln(&n1) 
    fmt.Scanln(&n2) 
    switch { 
        case n1 > n2: 
            fmt.Println("Первое число больше второго") 
        case n1 < n2: 
            fmt.Println("Второе число больше первого") 
        case n1 == n2: 
            fmt.Println("Числа равны") 
    } 
}

когда n1 < n2, должен печатать текст, но он этого не делает

Ответ или решение

Проблема, описанная вами, связана с использованием оператора switch в вашем коде на языке Go. Давайте рассмотрим ваш код и выясним, почему он не работает так, как ожидается.

Вот ваш исходный код:

package main

import "fmt"

func main() { 
    var n1, n2 int 
    fmt.Scanln(&n1) 
    fmt.Scanln(&n2) 
    switch { 
        case n1 > n2: 
            fmt.Println("Первое число больше второго") 
        case n1 < n2: 
            fmt.Println("Второе число больше первого") 
        case n1 == n2: 
            fmt.Println("Числа равны") 
    } 
}

Причина проблемы

Ваш код выглядит корректно и должен выполнять свою задачу, если введены два целых числа. Однако, существующая проблема может быть вызвана следующими факторами:

  1. Неправильный ввод данных: Если при вводе данных в программе вы не вводите целые числа или вводите их в неправильном формате (например, символы вместо чисел), fmt.Scanln не сможет прочитать их, и переменные n1 и n2 могут оставаться неинициализированными.

  2. Обработка ошибок: В вашем коде не обрабатывается возможная ошибка, возникающая при вводе данных. Это означает, что в случае некорректного ввода программа может просто перейти к завершению.

Решение

  1. Убедитесь, что вводимые данные — это именно целые числа. Для улучшения надежности программы, добавьте обработку ошибок:
package main

import "fmt"

func main() { 
    var n1, n2 int 
    fmt.Print("Введите первое число: ")
    _, err := fmt.Scanln(&n1) 
    if err != nil {
        fmt.Println("Ошибка ввода для первого числа:", err)
        return
    }

    fmt.Print("Введите второе число: ")
    _, err = fmt.Scanln(&n2) 
    if err != nil {
        fmt.Println("Ошибка ввода для второго числа:", err)
        return
    }

    switch { 
        case n1 > n2: 
            fmt.Println("Первое число больше второго") 
        case n1 < n2: 
            fmt.Println("Второе число больше первого") 
        case n1 == n2: 
            fmt.Println("Числа равны") 
    } 
}
  1. Дополнительные проверки перед выполнением операции сравнения могут помочь понять, какой именно ввод вызывает проблему.

Заключение

Перепроверьте вводимые данные и добавьте обработку ошибок, как показано выше. Это должно решить вашу проблему с выводом и сделать код более надежным. Если проблема персистирует, проверьте окружение выполнения вашей программы, возможно, оно также может вызывать неожиданные ошибки.

Оцените материал
Добавить комментарий

Капча загружается...