Zbyt długi kod. Czy tak powinno być?

0

Cześć,
Zastanawiałem się nad tym jak wykonać taki kod, który będzie wypisywał n-tą literę z angielskiego alfabetu. Niby nic trudnego, ale jednak pierwsze i jedyne co mi przychodzi do głowy do instrukcja if. Kiedy tak robię kod wychodzi jednak zbyt długi...

#include <iostream>
using namespace std;

int main() 
{
  int n;
  cin>>n;
  {
    if(n=1)
     {
       cout<<"a";
     }  
     else if( n=2)
    {
      cout<<"b";
    }
     else if( n=3)
     {
       cout<<"c";
     }
     else if( n=4)
      {
        cout<<"d";
      }
     else if( n=5)
      {
       cout<<"e";
      }
     else if( n=6)
     {
       cout<<"f";
     }
     else if( n=7)
     {
       cout<<"g";
     }
     else if( n=8)
     {
       cout<<"h";
     }
     else if( n=9)
     {
       cout<<"i";
     }
     else if( n=10)
     {
       cout<<"j";
     }
     else if( n=11)
     {
       cout<<"k";
     }
     else if( n=12)
     {
       cout<<"l";
     }
     else if( n=13)
     {
       cout<<"m";
     }
     else if( n=14)
     {
       cout<<"n";
     }
     else if( n=15)
     {
       cout<<"o";
     }
     else if( n=16)
     {
       cout<<"p";
     }
     else if( n=17)
     {
       cout<<"q";
     }
     else if( n=18)
     {
       cout<<"r";
     }
     else if( n=19)
     {
       cout<<"s";
     }
     else if( n=20)
     {
       cout<<"t";
     }
     else if( n=21)
     {
       cout<<"u";
     }
     else if( n=22)
     {
       cout<<"v";
     }
     else if( n=23)
     {
       cout<<"w";
     }
     else if( n=24)
     {
       cout<<"x";
     }
     else if( n=25)
     {
       cout<<"y";
     }
     else if( n=26)
     {
       cout<<"z";
     }
  }
   return 0;
}    

Tak, wiem że ten kod jest niepoprawny, ale chodzi tylko o to żeby pokazać jak długi jest to kod używając ifa...
Dlatego zwracam się tutaj z prośbą żebyście mi pomogli rozwiązać ten problem :), czyli:
jak skrócić ten kod tak, aby wszystko działało poprawnie? (np. przy wypisaniu 1, wypisuje pierwszą literę alfabetu angielskiego czy ,,a''')

5

Sprawdź sobie jakie wartości kryją się pod 'a', 'b', etc. i spróbuj znaleźć zależność.

5

w warunkach robisz przypisanie if(n=1) a powinno być porównanie if(n==1)

0

Dziękuję @jvoytech teraz rzeczywiście działa.
Kolejny problem z głowy ;)

5
[lew@lenh ~]$ hexdump -C
abcdefghijklmnoprsuwxyz
00000000  61 62 63 64 65 66 67 68  69 6a 6b 6c 6d 6e 6f 70  |abcdefghijklmnop|
00000010  72 73 75 77 78 79 7a 0a                           |rsuwxyz.|

Jeśli użyjesz pojedynczego cudzysłowu, możesz wpisać w nim znak i wtedy będzie oznaczał wartość jego kodu ASCII (typ char, nie char*). Spróbuj tego:

#include <iostream>

int main() {
  std::cout << (int) 'a' << std::endl;
}

Wyświetla się 97 (czyli 0x61 szesnastkowo).

3

@LubieMatme321100: poniżej kod który robi dokładnie to co Twój:

#include <iostream>

using namespace std;

int main() {

    int n;
    cin >> n;

    if (n > 0 && n <= 26) {
        cout << static_cast<char>('a' + n - 1);
    }

    return 0;
}
2

Jeszcze inna, być może bardziej zrozumiała technika:

int main() {
    const char* alphabet = "abcdefghijklmnopqrstuvwxyz";
    int n;
    std::cin >> n;
    std::cout << alphabet[n - 1] << "\n";
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1