2016-03-20 3 views
-1

Я создаю программу, которая шифрует текст, используя шифр vigenere. Однако, когда я когда-либо запускать код, это дает мне ошибки говоряМногосимвольная символьная постоянная ошибка

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. 

Я пытаюсь получить значение ASCII в я (е) письмо от пользовательского ввода путем преобразования полукокса к междунар. Мой код программы ниже. Помощь Pls.

#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

Вам действительно нужно опубликовать весь этот код? Это риторический вопрос. – juanchopanza

+0

Я действительно не уверен, потому что я новичок в программировании и не уверен на 100%, где/что именно вызывает проблему. –

+0

Это основное решение проблемы. Удалите все, пока не останется только проблемный код. – juanchopanza

ответ

0

Проблема заключается в том, что вы пытаетесь преобразовать строку в символ здесь.

int letternum = 'currentletter'; 

Но вы должны преобразовать символ в значение ASCII. Для этого просто удалите кавычки. Затем он преобразует переменную - currentletter. Если вы включите '', он попытается прочитать его как персонажа и, следовательно, даст вам ошибку!

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

'currentletter', как говорит предупреждение, постоянно многопрофильный характер. Он имеет тип int, и его значение определяется реализацией. Он не имеет ничего общего с переменной currentletter, которую вы определили на приведенной выше строке.

Многосимвольные константы - очень бесполезная языковая функция. Они не могут использоваться в переносном коде. Они законны, поэтому соответствующий компилятор не отвергает их (даже если они будут иметь значение, которое выходит за пределы допустимого диапазона), но, видимо, вы вызываете компилятор с опцией, которая заставляет его отклонять их (что на самом деле является довольно хорошая идея).

Моя догадка, вы должны иметь:

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

Это было бы законно, но я не знаю, почему вы должны скопировать значение currentletter в int объекта. char уже является целым типом.

Мне нужно будет изучить остальную часть кода, чтобы определить, как вы должны исправить эту проблему, но это отвечает на ваш вопрос об ошибке.

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