22

次のように宣言された文字列があります。

 string text = "THIS IS LINE ONE "+(Char)(13)+" this is line 2";

それでも、私が書くときConsole.WriteLine(text);

出力は次のとおりです。

this is line 2E

なぜこのような動作が発生するのですか? それとも、私が愚かで、明らかな何かを見逃しているからですか?

印刷されない理由:

THIS IS LINE ONE [CR] //where the CR is a non printed character 
this is line 2

編集

注意: これは「キャリッジ リターンを追加するにはどうすればよいですか」という質問ではありません。

4

7 に答える 7

3

「キャリッジ リターンは、カートリッジ リターンと呼ばれることもあり、多くの場合、CR またはリターンに短縮されます。これは、デバイスの位置をテキスト行の先頭にリセットするために使用される制御文字またはメカニズムです。」(ソース)

CR行を変更することはありません。実際には、行の最初に戻ってその上に"THIS IS LINE ONE "印刷されます。そのため、行 1 が 1 文字長いため、文の最後に" this is line 2"追加が表示されるのはなぜですか。E2 つの文字列 (最初の文字列の最後の文字と 2 番目の文字列の最初の文字) から 2 つのスペースを削除すると、出力"this is line 2NE"

同じソースから:

「プリンター、またはディスプレイなどの他の出力システムに、カーソルの位置を同じ行の最初の位置に移動するように命令します。」

探しているのは ではなく、と(改行)CRの組み合わせです。CRLFCRLF

于 2014-11-28T16:35:44.923 に答える
2

(Char)13改行(Char)10は改行です。他の人が言ったように、これは (Char)13 が現在の行の先頭に戻ることを意味するため、(短い) 行 2 を書き込むまでに、文字列の最初のセクションに上書きされます。 - したがって、残りの「E」。

短い 2 番目の文字列で試してみると、次のようなことが起こっていることがわかります。

string text = "THIS IS LINE ONE " + (Char)13 +"test";
Console.WriteLine(text);

出力を与えます:

"test IS LINE ONE"

したがって、問題を解決するための正しいコードは次のようになります。

string text = "THIS IS LINE ONE " + (Char)10 +"test";
Console.WriteLine(text);

出力:

THIS IS LINE ONE
this is line 2

編集:

もともと、お使いのプリンターは (Char)13 である必要があるとおっしゃっていたので(Char)10 + (Char)13、同様の効果を得るために両方 (またはその逆) を試すことをお勧めしました。しかし、Peter M の非常に有益なコメントのおかげで、あなたが使用しているプリンターのブランドは、マニュアルによると、ライン フィードとキャリッジ リターンを生成する(Char)10-だけが実際に必要なようです。(Char)10

于 2014-11-28T16:10:00.340 に答える
2

出力は見た目とは異なります。端末プログラムは、キャリッジ リターンの存在をテキスト レイアウト コマンド (つまり、左に戻る) として解釈するため、stdout に書き込まれたバイトの一部の文字を隠しています。hexdump は、出力のバイトそのものを表示することで、出力が正しいことを確認できます。

using System;
public class Hello1 {
  public static void Main()  {
     string text = "THIS IS LINE ONE "+(Char)(13)+" this is line 2";
     System.Console.WriteLine(text);
   }   
}

コンパイルして実行:

$ gmcs a.cs
$ ./a.exe
 this is line 2E
$ ./a.exe | hexdump -C
00000000  54 48 49 53 20 49 53 20  4c 49 4e 45 20 4f 4e 45  |THIS IS LINE ONE|
00000010  20 0d 20 74 68 69 73 20  69 73 20 6c 69 6e 65 20  | . this is line |
00000020  32 0a                                             |2.|
00000022
于 2014-11-28T21:05:59.717 に答える