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

c++ szyfrowanie wyrzuca liczby ujemne

0 głosów
98 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Doge Bywalec (2,300 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 (17,750 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,210 wizyt
pytanie zadane 17 lutego 2017 w C i C++ przez RedMartin Użytkownik (640 p.)
0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 10 marca 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)
+1 głos
0 odpowiedzi 127 wizyt
pytanie zadane 9 października 2021 w Systemy operacyjne, programy przez Ser-Ver Użytkownik (700 p.)

88,355 zapytań

136,952 odpowiedzi

305,669 komentarzy

58,619 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...