256 文字のテキスト ファイルを作成しました。テキスト ファイルの最初の文字は ASCII 値 0 で、テキスト値の最後の文字は ASCII 値 255 です。その間の文字は 0 から 255 まで均等に増加します。したがって、文字 #27 は ASCII 値 27 です。文字 #148 は ASCII 値 148 である必要があります。
私の目標は、このテキスト ファイルのすべての文字を読み取ることです。
で読んでみましたcin
。と を試しcin.get()
てみcin.read()
ましたが、どちらもフォーマットされていない入力を読み取るはずです。しかし、26 番目の文字を読み取ると、どちらも失敗します。を使用したときに、 read in を読んでいると言ったとunsigned char
思いますが、これは単に真実ではありません。そして、通常の signed を使用すると、を読み込んでいると言いました。ASCIIに相当する文字が何であれ、それを読み取る必要があります。おそらくそれがヒットしたと思いますか?しかし、私は以前に別の StackOverflow の投稿を読んだことがありますが、それは実際に書くことができる文字ではありません。だから私はなぜ整数または整数を表す文字値で咳をしているのかわからないcin
255
char
cin
-1
26
cin
EOF
EOF
cin
-1
255
. 誰かが私が間違っていること、その理由、そして最善の解決策とは何か、そしてその理由を教えてもらえますか?
貼り付ける具体的なコードはあまりありません。私はいくつcin.get()
かの異なる非動作の組み合わせを試しました. これを除いて、私は26番目の文字を超えて読むことができなかった:cin.read()
char
unsigned char
char
int
unsigned char character;
while ( (character = (unsigned char)cin.get()) != EOF) { ... }
興味深いことに、これは while ループを 26 文字目で止めませんが、先にも進みません。気に入らないものを検出した瞬間に次のキャラクターに進むことを拒否するか、単に拒否するかのcin
ようcin.get()
です。cin.read()
また、次のようなものが存在することも認識していcin.ignore()
ますが、私の入力は予測できません。つまり、このテキスト ファイルの 256 文字は単なるテスト ケースであり、実際の入力はかなりランダムです。これは大きな宿題の一部ですが、この特定の質問は宿題とは関係ありません。プロセスの一部で立ち往生しています。
注:特定のテキスト ファイルではなく、標準入力ストリームから読み込んでいます。まだ簡単な解決策はないようです。これが以前に行われたことがないとは信じられませんcin
。
アップデート:
Windows では、おそらく Ctrl-Z が原因で、文字 26 の後に停止します。この問題はあまり気にしません。Linux でのみ動作する必要があります。
ただし、Linux では、0 から 127 までのすべての文字を読み取ります。しかし、127 から 255 までの拡張 ASCII 文字を読み取っていないようです。模倣するはずの出力を生成する「ソリューション」プログラムがあり、それはプログラムは何とか 255 文字すべてを読み取ることができます。
質問: を使用してcin
、255 個の ASCII 文字をすべて読み取るにはどうすればよいですか?
解決済み
使用:
int characterInt;
unsigned char character;
while ( (characterInt = getchar()) != EOF )
{
// 'character' now stores values from 0 - 255
character = (unsigned char)(characterInt);
}