2014-11-21 2 views
0

У меня возникла проблема с запуском программы шифрования. Для строк с одним словом он работает хорошо (например, abcd), но когда я печатаю два или три или более слова (например, abcd ab ac), он не запрашивает ключ, но переписывает введенное предложение , Что я делаю не так? Заранее спасибо. Код:Цезарный шифр - Что случилось?

#include <iostream> 
#include <ctime> 
#include <cstdlib> 
#include <conio.h> 
#include <string> 
#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
     int key, l; 
     char choose; 
     string message; 
     cout<<"Type the message"<<endl; 
     cin>>message; 
     cout<<"Give me a key from 0 to 26"<<endl; 
     cin>>key; 
     for (int i=0,l=message.size(); i<=l; i++) 
     { 
      if (isalpha(message[i])) 
      { 
       if (isupper(message[i])) 
       { 
        cout<<(char)('A'+(message[i]-'A'+key)%26); 
       } 
       if (islower(message[i])) 
       { 
        cout<<(char)('a'+(message[i]-'a'+key)%26); 
       } 
      } 
      else 
      { 
       cout<<message[i]; 
      } 
     } 
     return 0; 
} 
+2

Это было бы намного легче ответить, если бы мы могли видеть, какой код вы написали. В противном случае это конкурс того, кто может догадываться и/или читать ваш ум. – CoryKramer

+0

Извините, я пропустил об этом. Я отредактировал его. – DominikM

+0

Если я запустил его и ввел несколько слов, он не повторяет предложение, которое я набрал; он запрашивает ключ, затем печатает первое введенное мной слово. Вы уверены, что используете эту программу? – molbdnilo

ответ

1

Использование

std::getline(std::cin, message); 

CIN не делает только чтение до следующего пробела, остальная часть входа в настоящее время хранятся в буфере потока таким образом, что вы получите следующие слово вашего предложения, введенное на первом этапе в качестве ввода для вашего второго cin.

+0

Спасибо, это сработало. Можете ли вы объяснить мне, почему мое решение было неправильным? – DominikM

+0

Я отредактировал мой ответ – LMF

Смежные вопросы