2014-11-21 200 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 2014-11-21 13:55:47

+0

對不起,我對此有所作爲。我編輯它。 – DominikM 2014-11-21 14:01:29

+0

如果我運行它並輸入幾個單詞,它不會重複我輸入的句子;它要求一個鍵,然後打印我輸入的第一個單詞。你確定你正在運行這個程序嗎? – molbdnilo 2014-11-21 14:08:29

回答

1

使用

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

CIN不只讀,直到下一個空格,輸入的其餘部分被保持在流緩存,讓你得到下一第一步輸入你的句子作爲第二步的輸入cin

+0

謝謝,它工作。你能向我解釋爲什麼我的解決方案不正確嗎? – DominikM 2014-11-21 14:09:57

+0

我編輯了我的答案 – LMF 2014-11-21 14:11:15