2016-03-20 1 views
-1

Ich erstelle ein Programm, das Text verschlüsselt mit dem vigenere Chiffre. Wenn jedoch immer ich den Code ausführen, gibt es mir Fehler zu sagenMulti-Zeichen-Konstantenfehler

vigenere.c:27:29: error: multi-character character constant [-Werror,-Wmultichar] 
      int letternum = 'currentletter'; 
          ^
vigenere.c:27:29: error: character constant too long for its type [-Werror] 
vigenere.c:26:18: error: unused variable 'currentletter' [-Werror,-Wunused-variable] 
      char currentletter = input[i]; 
       ^
3 errors generated. 

Ich versuche, den ASCII-Wert des i (th) Briefes von der Eingabe des Benutzers zu erhalten, indem die Kohle in einen int zu konvertieren. Mein Programmcode ist unten. Bitte helfen.

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

string input; 
int digitnum = 0; 

int main(int argc, string argv[]) 
{ 
    if (argc>2 || argc<2) 
    { 
     printf("Please enter a valid argument.\n"); 
     return 1; 
    } 

    input = GetString(); 

    for (int i = 0; i < strlen(input); i++) 
    { 
     char c = input[i]; 

     if (isalpha(input[i])) 
     { 
      char currentletter = input[i]; 
      int letternum = 'currentletter'; 

      if(isupper(c)) 
      { 
       int upper = 'A'; 
       int alphanum = letternum - upper; 

       int newint = (alphanum + alphanum) % 26; 

       newint = newint + upper; 

       char newchar = newint; 

       printf("%c", newchar); 
      } 

      if(islower(c)) 
      { 
       int lower = 'a'; 
       int alphanum = letternum - lower; 

       int newint = (alphanum + alphanum) % 26; 

       newint = newint + lower; 

       char newchar = newint; 

       printf("%c", newchar); 
      } 

      digitnum = digitnum + 1; 

      if (digitnum >= strlen(argv[1])) 
      { 
       digitnum = 0; 
      } 
     } 
     else 
     { 
      printf("%c", input[i]); 
     } 
    } 
} 
+0

Müssen Sie wirklich diesen ganzen Code posten? Das ist eine rhetorische Frage. – juanchopanza

+0

Ich bin mir wirklich nicht sicher, weil ich neu in der Programmierung bin und nicht 100% sicher bin, wo/was genau das Problem verursacht. –

+0

Es ist grundlegende Problemlösung. Entfernen Sie alles, bis Sie nur noch problematischen Code übrig haben. – juanchopanza

Antwort

0

Das Problem ist, dass Sie hier versuchen, eine Zeichenfolge in ein Zeichen zu konvertieren.

int letternum = 'currentletter'; 

Aber Sie müssen das Zeichen in ASCII-Wert konvertieren. Entfernen Sie dazu einfach die Anführungszeichen. Dann wird die Variable konvertiert - currentletter. Wenn Sie das '' einschließen, versucht es, es als ein Zeichen zu lesen und Ihnen folglich einen Fehler zu geben!

1
char currentletter = input[i]; 
int letternum = 'currentletter'; 

'currentletter', wie die Warnung sagt, ist eine Konstante mit mehreren Zeichen. Es ist vom Typ int und sein Wert ist implementierungsdefiniert. Es hat nichts mit der Variablen zu tun, die Sie in der Zeile oben definiert haben.

Konstanten mit mehreren Zeichen sind eine fast nutzlose Sprachfunktion. Sie können nicht in portablem Code verwendet werden. Sie sind legal, also wird ein Compiler sie nicht ablehnen (auch wenn sie einen Wert haben, der außerhalb des gültigen Bereichs liegt), aber anscheinend rufen Sie den Compiler mit einer Option auf, die ihn ablehnt (was eigentlich ein ziemlich gute Idee).

Meine beste Vermutung ist, sollten Sie haben:

char currentletter = input[i]; 
int letternum = currentletter; 

Die legal wäre, aber ich weiß nicht, warum Sie den Wert currentletter in ein int Objekt kopieren müssen. char ist bereits ein Integer-Typ.

Ich müsste den Rest Ihres Codes studieren, um festzustellen, wie Sie das Problem beheben sollten, aber das beantwortet Ihre Frage zu der Fehlermeldung.