2012-03-08 20 views
-2

現在、カードゲームを構築しており、コンソールに出力を書き込むとすべて正常に動作します。 しかし、ファイルに書き込むと、各カードに関連付けられたスーツは、4種類の異なる文字の奇妙なセットになります。 ASCIIテーブルで定義されているHeart、Diamond、Club、Spadeの各シンボルを印刷する代わりに、 - と|を含む4つの異なる文字が出力されます。他の2人のキャラクターは、超小型スクリプトLのように見えます。C#テキストファイルの出力が正しくありません

public enum SUIT { HEART = 0, DIAMOND = 1, CLUB = 2, SPADE = 3 }; 
public enum VALUE { NINE = 0, JACK = 1, QUEEN = 2, KING = 3, TEN = 4, ACE = 5 }; 
public static string printCard(PinochleCard theCard) 
//This card game uses a set of 5 card denominations 
    { 
     string cardS = ""; 

     switch (theCard.cardValue) 
     { 
      case VALUE.ACE: 
       cardS += 'A'; 
       break; 
      case VALUE.TEN: 
       cardS += "10"; 
       break; 
      case VALUE.KING: 
       cardS += 'K'; 
       break; 
      case VALUE.QUEEN: 
       cardS += 'Q'; 
       break; 
      case VALUE.JACK: 
       cardS += 'J'; 
       break; 
      case VALUE.NINE: 
       cardS += '9'; 
       break; 
     } 
     cardS += (char)(theCard.suit + 3); // +3 converts to heart, diamond, club, spade in 
     return cardS.PadRight(4);   // the console but not for files 
    } 

次に、この関数をループで呼び出してユーザーの手を印刷します。

ありがとうございました!

+0

ために、このリンクを参照してください明らかにこれはあなたのコードのバグです。もちろん、コードを提供していないので、私たちはあなたを助けることはできません。あなたのコードをそのまま投稿してください。 –

+2

コードはどこですか?あなたはおそらくユニコードを書いているでしょう:) –

+0

どのように心臓、ダイヤモンド、クラブ、スペードシンボルを出力していますか?ファイルを表示するためにどのエディタを使用していますか?スタンダードASCIIにはコードがあるとは思えないので、ファイルを見ると正しく表示されないことは驚くことではありません。 – Sahand

答えて

2

ASCIIには、ハート、ダイヤモンド、クラブ、スペードは含まれません。それらを含む「ASCIIテーブル」は、最初の127の値(ASCIIで定義されているもの)のASCIIと互換性のある特定のエンコーディングについて話していますが、それ自体の方法になります。

.NETはすべてのテキストにUnicodeを使用します。 Unicode code chartsに問い合わせて、あなたが望む文字を見つけることができます。しかし、ファイルに書き込む方法(使用するエンコーディングなど)を考慮する必要があります。多くの場合、コンソールフォントはUnicode内のすべてをサポートしていません。

+0

それで、どのようにして私のTextfileをASCIIでエンコードするのですか? – CodeKingPlusPlus

+1

@CodeKingPlusPlus:あなたは 'Encoding.ASCII'を使うことができます - しかし、私が言うように、それは*どんなスーツシンボルも含めるつもりはありません。 *いくつかのウェブページがそれらについて言うかもしれないものは、ASCII *の一部ではありません。 –

0

これを試してみてください。これはつまり、問題はそれがすべてどのようにと異なりあるものであることを私は確信することができませんでしたユニコードとしてではなく、あなたのコードのない文字列を格納.NETとは何か可能性があり

 String Body = "some string"; 
     System.IO.StreamWriter ansiWriter = new StreamWriter("file.txt", false, Encoding.GetEncoding(1250)); 
     ansiWriter.WriteLine(Body); 
     ansiWriter.Close(); 
0

あなたはシンボルを保存しました。

は、より多くの情報bytes.com

関連する問題