2016-03-20 13 views
-1

私は、vigenere暗号を使用してテキストを暗号化するプログラムを作成しています。私は、コードを実行すると、これまでしかし、それは私がint型に文字を変換することにより、ユーザーの入力のI(番目)の文字のASCII値を取得しようとしています複数文字の文字定数エラー

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. 

言って私にエラーが発生します。私のプログラムコードは以下の通りです。 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とは関係ありません。

複数文字定数は、ほとんど役に立たない言語機能です。ポータブルコードでは使用できません。これらは合法です。準拠しているコンパイラはそれらを拒否することはありません(たとえ値が範囲外であっても)。しかし、明らかにコンパイラを呼び出すオプションは、コンパイラを拒否しますかなり良いアイデア)。

私の最高の推測では、あなたが持っているべきである:法的だろうが、あなたはintオブジェクトにcurrentletterの値をコピーする必要があるだろう、なぜ私にはわからない

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

charは既に整数型です。

問題を修正する方法を決定するために残りのコードを勉強する必要がありますが、これはエラーメッセージに関する質問に答えます。

関連する問題