• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ szyfrowanie wyrzuca liczby ujemne

Object Storage Arubacloud
0 głosów
272 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Doge Gaduła (3,370 p.)

Witam, mam następujący kod:

#include <iostream>

using namespace std;

string szyfruj2(string tekst, int klucz1, int klucz2)
{
    char pomocnik;
    klucz1%=26;
    klucz2%=26;
    cout<<"Klucz 1: "<<klucz1<<endl;
    cout<<"Klucz 2: "<<klucz2<<endl;

    for(int i=0; i<tekst.size(); i++)
    {
        pomocnik=tekst[i];
        if(i%2!=0)
        {
            pomocnik+=klucz1;
            if(pomocnik>122)
            {
                pomocnik-=26;
                tekst[i]=pomocnik;
            }
            else
            {
                tekst[i]=pomocnik;
            }
        }
        else if(i%2==0)
        {
            pomocnik+=klucz2;
            if(pomocnik>122)
            {
                pomocnik-=26;
                tekst[i]=pomocnik;
            }
            else
            {
                tekst[i]=pomocnik;
            }
        }
    }//for

    return tekst;
}

int main()
{
    string wyraz;
    int k1, k2;

    cout<<"Podaj wyraz do zaszyfrowania: ";
    cin>>wyraz;
    while(true)
    {
        cout<<"Podaj klucz dla liczb nieparzystych (mniejszy od 1000): ";
        cin>>k1;
        if(k1>1000)
        {
            cout<<"Klucz jest wiekszy od 1000"<<endl;
        }
        else
        {
            break;
        }
    }
    while(true)
    {
        cout<<"Podaj klucz dla liczb nieparzystych (mniejszy od 1000): ";
        cin>>k2;
        if(k2>1000)
        {
            cout<<"Klucz jest wiekszy od 1000"<<endl;
        }
        else
        {
            break;
        }
    }
    cout<<endl<<"Zaszyfrowany wyraz to \""<<szyfruj2(wyraz, k1, k2)<<"\""<<endl;

    return 0;
}

i problem jest taki, że czasami nawet jeżeli pomocnik jest większy od 122, to nie odejmuje, a nawet gdy się go wyświetli, to pokazuje liczbę ujemną. Dlaczego tak się dzieje?

1 odpowiedź

+2 głosów
odpowiedź 22 kwietnia 2021 przez overcq Pasjonat (21,650 p.)
wybrane 22 kwietnia 2021 przez Doge
 
Najlepsza

Domyślnie char może być signed char. Wtedy pomocnik po osiągnięciu wartości 127 przekracza zakres i jest ujemny.

Podobne pytania

0 głosów
0 odpowiedzi 1,651 wizyt
pytanie zadane 17 lutego 2017 w C i C++ przez RedMartin Użytkownik (640 p.)
0 głosów
1 odpowiedź 530 wizyt
pytanie zadane 10 marca 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)
+1 głos
0 odpowiedzi 317 wizyt
pytanie zadane 9 października 2021 w Systemy operacyjne, programy przez Ser-Ver Użytkownik (820 p.)

92,555 zapytań

141,403 odpowiedzi

319,555 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...