I like the verbose messages from gcc static analyzer:
<source>: In function 'int main()':
<source>:79:18: warning: use of uninitialized value 'discount' [CWE-457] [-Wanalyzer-use-of-uninitialized-value]
   79 |     totalSavings = pricePerDisc * quantity * discount;
      |     ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  'int main()': events 1-4
    |
    |    4 | int main()
    |      |     ^~~~
    |      |     |
    |      |     (1) entry to 'main'
    |......
    |   21 |     double discount;
    |      |            ~~~~~~~~
    |      |            |
    |      |            (2) region created on stack here
    |      |            (3) capacity: 8 bytes
    |   22 |     string discType;
    |   23 |     string disc1 = "Ultimate Disc";
    |      |                    ~~~~~~~~~~~~~~~
    |      |                    |
    |      |                    (4) calling 'std::__cxx11::basic_string<char>::basic_string<>' from 'main'
    |
    +--> 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with <template-parameter-2-1> = std::allocator<char>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': events 5-8
           |
           |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/basic_string.h:634:7:
           |  634 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
           |      |       ^~~~~~~~~~~~
           |      |       |
           |      |       (5) entry to 'std::__cxx11::basic_string<char>::basic_string<>'
           |......
           |  638 |         if (__s == 0)
           |      |         ~~
           |      |         |
           |      |         (6) following 'false' branch (when '__s' is non-NULL)...
           |......
           |  641 |         const _CharT* __end = __s + traits_type::length(__s);
           |      |                                     ~~~~~~~~~~~~~~~~~~~~~~~~
           |      |                                                        |
           |      |                                                        (7) ...to here
           |      |                                                        (8) calling 'std::char_traits<char>::length' from 'std::__cxx11::basic_string<char>::basic_string<>'
           |
           +--> 'static constexpr std::size_t std::char_traits<char>::length(const char_type*)': events 9-11
                  |
                  |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/char_traits.h:383:7:
                  |  383 |       length(const char_type* __s)
                  |      |       ^~~~~~
                  |      |       |
                  |      |       (9) entry to 'std::char_traits<char>::length'
                  |......
                  |  386 |         if (std::__is_constant_evaluated())
                  |      |         ~~
                  |      |         |
                  |      |         (10) following 'false' branch...
                  |......
                  |  389 |         return __builtin_strlen(__s);
                  |      |                ~~~~~~~~~~~~~~~~~~~~~
                  |      |                                |
                  |      |                                (11) ...to here
                  |
           <------+
           |
         'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with <template-parameter-2-1> = std::allocator<char>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': events 12-13
           |
           |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/basic_string.h:641:56:
           |  641 |         const _CharT* __end = __s + traits_type::length(__s);
           |      |                                     ~~~~~~~~~~~~~~~~~~~^~~~~
           |      |                                                        |
           |      |                                                        (12) returning to 'std::__cxx11::basic_string<char>::basic_string<>' from 'std::char_traits<char>::length'
           |  642 |         _M_construct(__s, __end, forward_iterator_tag());
           |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |                     |
           |      |                     (13) calling 'std::__cxx11::basic_string<char>::_M_construct<const char*>' from 'std::__cxx11::basic_string<char>::basic_string<>'
           |
           +--> 'void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_construct(_InIterator, _InIterator, std::forward_iterator_tag) [with _FwdIterator = const char*; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': events 14-15
                  |
                  |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/basic_string.tcc:217:7:
                  |  217 |       basic_string<_CharT, _Traits, _Alloc>::
                  |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (14) entry to 'std::__cxx11::basic_string<char>::_M_construct<const char*>'
                  |......
                  |  248 |       }
                  |      |       ~
                  |      |       |
                  |      |       (15) calling 'std::__cxx11::basic_string<char>::_M_construct<const char*>(const char*, const char*, std::forward_iterator_tag)::_Guard::~_Guard' from 'std::__cxx11::basic_string<char>::_M_construct<const char*>'
                  |
                  +--> 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_construct(_InIterator, _InIterator, std::forward_iterator_tag)::_Guard::~_Guard() [with _InIterator = const char*; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': events 16-18
                         |
                         |  238 |           ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); }
                         |      |           ^           ~~                                        ~
                         |      |           |           |                                         |
                         |      |           |           |                                         (18) ...to here
                         |      |           |           (17) following 'false' branch...
                         |      |           (16) entry to 'std::__cxx11::basic_string<char>::_M_construct<const char*>(const char*, const char*, std::forward_iterator_tag)::_Guard::~_Guard'
                         |
                  <------+
                  |
                'void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_construct(_InIterator, _InIterator, std::forward_iterator_tag) [with _FwdIterator = const char*; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': event 19
                  |
                  |  248 |       }
                  |      |       ^
                  |      |       |
                  |      |       (19) returning to 'std::__cxx11::basic_string<char>::_M_construct<const char*>' from 'std::__cxx11::basic_string<char>::_M_construct<const char*>(const char*, const char*, std::forward_iterator_tag)::_Guard::~_Guard'
                  |
           <------+
           |
         'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with <template-parameter-2-1> = std::allocator<char>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': event 20
           |
           |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/basic_string.h:642:21:
           |  642 |         _M_construct(__s, __end, forward_iterator_tag());
           |      |         ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |                     |
           |      |                     (20) returning to 'std::__cxx11::basic_string<char>::basic_string<>' from 'std::__cxx11::basic_string<char>::_M_construct<const char*>'
           |
    <------+
    |
  'int main()': events 21-22
    |
    |<source>:23:20:
    |   23 |     string disc1 = "Ultimate Disc";
    |      |                    ^~~~~~~~~~~~~~~
    |      |                    |
    |      |                    (21) returning to 'main' from 'std::__cxx11::basic_string<char>::basic_string<>'
    |   24 |     string disc2 = "Disc-Golf Disc";
    |      |                    ~~~~~~~~~~~~~~~~
    |      |                    |
    |      |                    (22) calling 'std::__cxx11::basic_string<char>::basic_string<>' from 'main'
    |
    +--> 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with <template-parameter-2-1> = std::allocator<char>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': events 23-26
           |
           |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/basic_string.h:634:7:
           |  634 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
           |      |       ^~~~~~~~~~~~
           |      |       |
           |      |       (23) entry to 'std::__cxx11::basic_string<char>::basic_string<>'
           |......
           |  638 |         if (__s == 0)
           |      |         ~~
           |      |         |
           |      |         (24) following 'false' branch (when '__s' is non-NULL)...
           |......
           |  641 |         const _CharT* __end = __s + traits_type::length(__s);
           |      |                                     ~~~~~~~~~~~~~~~~~~~~~~~~
           |      |                                                        |
           |      |                                                        (25) ...to here
           |      |                                                        (26) calling 'std::char_traits<char>::length' from 'std::__cxx11::basic_string<char>::basic_string<>'
           |
           +--> 'static constexpr std::size_t std::char_traits<char>::length(const char_type*)': events 27-29
                  |
                  |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/char_traits.h:383:7:
                  |  383 |       length(const char_type* __s)
                  |      |       ^~~~~~
                  |      |       |
                  |      |       (27) entry to 'std::char_traits<char>::length'
                  |......
                  |  386 |         if (std::__is_constant_evaluated())
                  |      |         ~~
                  |      |         |
                  |      |         (28) following 'false' branch...
                  |......
                  |  389 |         return __builtin_strlen(__s);
                  |      |                ~~~~~~~~~~~~~~~~~~~~~
                  |      |                                |
                  |      |                                (29) ...to here
                  |
           <------+
           |
         'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with <template-parameter-2-1> = std::allocator<char>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': events 30-31
           |
           |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/basic_string.h:641:56:
           |  641 |         const _CharT* __end = __s + traits_type::length(__s);
           |      |                                     ~~~~~~~~~~~~~~~~~~~^~~~~
           |      |                                                        |
           |      |                                                        (30) returning to 'std::__cxx11::basic_string<char>::basic_string<>' from 'std::char_traits<char>::length'
           |  642 |         _M_construct(__s, __end, forward_iterator_tag());
           |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |                     |
           |      |                     (31) calling 'std::__cxx11::basic_string<char>::_M_construct<const char*>' from 'std::__cxx11::basic_string<char>::basic_string<>'
           |
           +--> 'void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_construct(_InIterator, _InIterator, std::forward_iterator_tag) [with _FwdIterator = const char*; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': events 32-33
                  |
                  |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/basic_string.tcc:217:7:
                  |  217 |       basic_string<_CharT, _Traits, _Alloc>::
                  |      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |       |
                  |      |       (32) entry to 'std::__cxx11::basic_string<char>::_M_construct<const char*>'
                  |......
                  |  248 |       }
                  |      |       ~
                  |      |       |
                  |      |       (33) calling 'std::__cxx11::basic_string<char>::_M_construct<const char*>(const char*, const char*, std::forward_iterator_tag)::_Guard::~_Guard' from 'std::__cxx11::basic_string<char>::_M_construct<const char*>'
                  |
                  +--> 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_construct(_InIterator, _InIterator, std::forward_iterator_tag)::_Guard::~_Guard() [with _InIterator = const char*; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': events 34-36
                         |
                         |  238 |           ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); }
                         |      |           ^           ~~                                        ~
                         |      |           |           |                                         |
                         |      |           |           |                                         (36) ...to here
                         |      |           |           (35) following 'false' branch...
                         |      |           (34) entry to 'std::__cxx11::basic_string<char>::_M_construct<const char*>(const char*, const char*, std::forward_iterator_tag)::_Guard::~_Guard'
                         |
                  <------+
                  |
                'void std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_construct(_InIterator, _InIterator, std::forward_iterator_tag) [with _FwdIterator = const char*; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': event 37
                  |
                  |  248 |       }
                  |      |       ^
                  |      |       |
                  |      |       (37) returning to 'std::__cxx11::basic_string<char>::_M_construct<const char*>' from 'std::__cxx11::basic_string<char>::_M_construct<const char*>(const char*, const char*, std::forward_iterator_tag)::_Guard::~_Guard'
                  |
           <------+
           |
         'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with <template-parameter-2-1> = std::allocator<char>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]': event 38
           |
           |/opt/compiler-explorer/gcc-trunk-20220913/include/c++/13.0.0/bits/basic_string.h:642:21:
           |  642 |         _M_construct(__s, __end, forward_iterator_tag());
           |      |         ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |                     |
           |      |                     (38) returning to 'std::__cxx11::basic_string<char>::basic_string<>' from 'std::__cxx11::basic_string<char>::_M_construct<const char*>'
           |
    <------+
    |
  'int main()': events 39-44
    |
    |<source>:24:20:
    |   24 |     string disc2 = "Disc-Golf Disc";
    |      |                    ^~~~~~~~~~~~~~~~
    |      |                    |
    |      |                    (39) returning to 'main' from 'std::__cxx11::basic_string<char>::basic_string<>'
    |......
    |   58 |     if (quantity <= 0)
    |      |     ~~              
    |      |     |
    |      |     (40) following 'false' branch...
    |......
    |   63 |     if (quantity >=5 && quantity <=9)
    |      |         ~~~~~~~~~~~~
    |      |                  |
    |      |                  (41) ...to here
    |......
    |   75 |     else if (quantity >=30)
    |      |          ~~         
    |      |          |
    |      |          (42) following 'false' branch...
    |......
    |   79 |     totalSavings = pricePerDisc * quantity * discount;
    |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |                  |              |
    |      |                  |              (43) ...to here
    |      |                  (44) use of uninitialized value 'discount' here
    |
    if (quantity <= 0)
    {
        cout << quantity << " is an invalid number of discs.\n";
        return 0;
    }
    if (quantity >=5 && quantity <=9)
discount is uninitialized when quantity is between 1 and 4. Add another if or change the existing ones to cover that range or initialize the variable on declaration, etc.