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

c++ szyfrowanie wyrzuca liczby ujemne

VPS Starter Arubacloud
0 głosów
329 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Doge Gaduła (3,420 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,960 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,714 wizyt
pytanie zadane 17 lutego 2017 w C i C++ przez RedMartin Użytkownik (640 p.)
0 głosów
1 odpowiedź 597 wizyt
pytanie zadane 10 marca 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)
+1 głos
0 odpowiedzi 354 wizyt
pytanie zadane 9 października 2021 w Systemy operacyjne, programy przez Ser-Ver Użytkownik (820 p.)

92,845 zapytań

141,786 odpowiedzi

320,859 komentarzy

62,178 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...