2016-11-27 70 views
0

我試圖創建一個程序來ecrypt字符串Ceasar的密碼,如果你不熟悉Ceasar密碼它是一個非常簡單的加密方法,它使用輸入字符串和數字「n」可以由用戶選擇,然後將整個字母n次移位。如果n = 1,那麼所有的A成爲B,等等。這個程序應該有應該由通過鍵盤輸入,並且必須由用戶以及選擇n個程序讀取的輸入串;和應該返回其中第一個字符表示第一字符UF未加密的字符串,然後以下字符應當是輸入字符串,利用由用戶所選擇的n個凱撒的Cypher加密的encypted版本的字符串。爲了簡潔起見,我還沒有在這篇文章包含在程序掃描n值,並調整它(它顯然具有比26更小)的代碼的一部分,我已經取消,以及該程序的一部分以大寫字母打開輸入字符串。問題與字符串打印

int main() { 
    int i, n; 
    char uncod[200] = {0}; 
    char cod[200] = {0}; 
    printf("insert the string to encript:"); 
    scanf("%[0-9a-zA-ZSPACE]", uncod); 
    cod[0] = (char)uncod[0]; 
    for(i == 1; i < 200; i++) { 
     sprintf(cod, "%d + n", uncod[i]); 
     if (cod[i] > 90) { 
    cod[i] = 64 + n; 
     } 
     if (cod[i] < 65) { 
    cod[i] = 91 + n; 
    } 
    }; 
    printf("%s\n", cod); 
} 

這個程序應採取unencypted字符串的ASCII碼,加上或減去N到找到單純的分配TE權性質,它只是通過陣列上運行,並具有後分配到每個角色他cyphered反一部分分配給輸出字符串的第一個值爲輸入字符串的未加密的第一個字符。問題是,當我打印輸出字符串時,它只會打印第一個字符而忽略其餘字符。如何解決這個問題?

+0

其一,'爲(I == 1 ... ' - 非常懷疑你的意思是在那裏進行邏輯等價比較,嘗試*賦值*而不是'='。第二,遲早你會發現循環應該運行到nullchar,而不是200. – WhozCraig

+0

哦對不起......是一個錯字 – Defcon97

+0

是的,它繼續con我發現如果發佈的代碼實際上是產生問題的代碼,那麼應該如何進行復制/粘貼操作。仍試圖弄清楚。 – WhozCraig

回答

1
  • n沒有在任何地方初始化。
  • 不知道這條線應該做什麼「sprintf(cod,」%d + n「,uncod [i])」「。爲什麼要將這樣的字符串連接到您的加密輸出?
  • 當字符串終止(\ 0)時,您可能想要停止循環。
+0

n未被初始化,因爲爲了簡潔起見,我沒有發佈其中n被掃描和調整過的代碼部分。在程序中它被初始化和工作。 – Defcon97

0

你應該知道,字符串只包含字符和字符值增加一些價值後,他們的ASCII碼會有所不同 舉個例子:如果你將在ASCII碼加50「A」,它會爲65 + 50 = 135,字符將會不同,並且某個時間值超過char的最大限制128. 而字符串將不會打印,因爲字符串被轉換爲BYTE緩衝區;你必須做什麼? 使用無符號字符代替char [限制爲0-255],您可以將其設爲字節緩衝區 然後使用%d打印字節緩衝區的值,或者使用%d打印字節緩衝區的值,或者使用%02X打印爲十六進制的值。 *這裏是代碼片段來打印BYTE緩衝器以十六進制*

for(loop=0; loop<5; loop++) 
{ 
    printf("hexV[%d] : %02X\n",loop,hexV[loop]); 
} 

參考摘自:C program to assign and copy hexadecimal values in character buffer.