2016-04-27 2 views
0

Ich benutze diesen Code für Caesars Verschlüsselungsprogramm. c = (alpha + k)% 26; // c = Chiffriertext ASCII-Code, "alphabetischer" ASCII-ASCII-Code, "k" -Schlüssel für verschlüsselten Text; Diese Gleichung gibt mir null (0) für alle 26 Alphabete.Caesars Verschlüsselungsprogramm in C

Vielen Dank!

#include <stdio.h> 
#include <stdlib.h> 
#include <cs50.h> 
#include <string.h> 
#include <ctype.h> 

int main (int argc, string argv[]) { 

    // took key from user and converted it to int 
    int k = atoi (argv[1]); 

    // get plaintext from user 
    string p = GetString(); 

    int c = 0, alpha = 0; 

    for (int i = 0, n = strlen(p); i < n; i++) 
    { 
     // if it is alphabet else if not alphabet 
     if (isalpha (p[i]) == true) { 

      // if it is capital case else lower case 
      if (isupper(p[i]) == true) { 
       alpha = p[i] - 65; 

       // add key to plaintext then take modulas 
       c = (alpha + k) % 26; 

       alpha = c + 65; 
      } else { 
       alpha = p[i] - 97; 

       // add key to plaintext then take modulas 
       c = (alpha + k) % 26; 

       alpha = c + 97; 
      } 

     } else { 
      alpha = p[i]; 
     } 

     printf("%c \n", alpha); 
    } 
} 
+0

Sind ++ Sie C oder C verwenden. Sie sagen C, aber Sie haben als C++ markiert. – NathanOliver

+0

Haben Sie versucht, es zu debuggen? –

+1

Und nichts mit Ihrem Problem zu tun haben, aber versuchen Sie bitte [* magische Zahlen *] (https://en.wikipedia.org/wiki/Magic_number_%28programming%29) zu vermeiden, wie zum Beispiel '65'. Verwenden Sie stattdessen richtige Zeichenliterale wie "A". –

Antwort

2

Von Dokumentation von isalpha

Jede dieser Routinen gibt ungleich Null wenn c eine bestimmte Darstellung eines alphabetischen Zeichen

So ist, wenn Sie if (isalpha (p[i]) == true) sagen Sie vergleichen was auch immer nicht Null Wert zurückgegeben von isalpha() (, die nicht sein darf 1) mit (true), die möglicherweise nicht wahr und dass if Block nicht ausgeführt wird. Das gleiche gilt für isupper(). Also im Grunde glaube ich nicht, dass die Gleichung Ihnen Null gibt, es ist nur der if Block, in dem die Gleichung nicht ausgeführt wird.

Sie können tun wollen:

if (isalpha(p[i]) 
{ 

    if (isupper(p[i]) 
    { 
     //your code 
    } 
    ...//your code 
} 
+0

Ich benutze nie die bool Ergänzungen zu C, dies ist ein Grund, warum. "0" ist falsch, alles andere ist wahr. 'if (isalpha (p [i])! = false)' ist unnötig ungeschickt, wenn das Sprachidiom 'if (isalpha (p [i])) 'ist. –

+0

@Wetterfahne genau! –

+1

Arbeitsversion des Codes: http://ideone.com/T1cPfQ – kfsone