問題タブ [getchar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Cでの文字カウントにEOFとgetchar()を使用する
私はCを初めて使用し、EOFとgetChar()がどのように機能するかを理解しようとしています。
ランダムな文字を入力しても、プログラムは何もしません。whileループから抜け出すことはないと思います。何故ですか?Windows7でCodeBlocksを使用しています。
c - getchar() のキャンセル
大量の処理を行う小さなプログラムがあります。エンターキーを押すと、その進行状況を印刷できます。
私がこれを実装した方法は、メイン スレッドで処理を実行する一方で、Enter キーを待機するために getchar() で pthread を常にループさせることです。
問題は、処理が終わったときです。これが発生すると、メイン スレッドは終了しますが、getchar() がブロックされているため、Enter キーが押されるのを待機します。
getchar() を「キャンセル」するにはどうすればよいですか?
c - Ubuntuでgetcharを使用して文字数を印刷できません
私はCとUbuntuを初めて使用します。while
とを使用して文字数を数える非常に簡単なプログラムを作成しgetchar()
ました。プログラムは次のとおりです。
保存して、を使用してコンパイルしましたgcc c1.c -o c1
。エラーは報告されていません。を使用してプログラムを実行しました./c1
。入力をdaniwebとして入力し、Enterキーを押しますが、カウントが表示されます。何が悪かったのか?無限ループですか?キーボードから入力がいつ与えられるかをどのようにgetchar()
判断しますか?EOF
c - テキスト内のスペースを 1 つだけに制限する - c
私は K&R を読んでいますが、質問は次のとおりです。入力を出力にコピーするプログラムを作成し、1 つ以上の空白の各文字列を単一の空白に置き換えます。私の心の中では、自分が何をする必要があるかを知っていると思います。ブール値を設定して、いつスペースにいるのかを知ることができます。私はそれを試みましたが、成功しませんでした。私はこのコードを見つけましたが、それは機能します。何がスペースの書き込みを妨げているのかを理解するのに苦労しています。私はそれを持っているかもしれないと思いますが、明確にする必要があります。
作業するテキストファイルを作成しました。テキストは次のとおりです。
「this」の「s」の後、状態は 1 に変わります。これは、スペースにいるためです。スペースが書き込まれ、次のスペースが読み取られます。それでは、次のように入力します。
しかし、inspace は 0 ではなく、1 です。コードはスキップして return 0; になり、何も書き込まずに while ループを続行しますか? 0 を返します。はループの外にありますが、これが値が返されていないことを確認できる唯一の方法です。
c++ - debian linuxc++キーストロークブレーキを無限ループにする方法
キーボードの「q」キーを押したときに無限ループを解除したい。私が気付いていなかった問題:標準のgetcharは、ユーザーが入力を行うのを待ってEnterキーを押すと、そこでループの実行が停止します。
「入力」の問題を回避しましたが、ループは停止して入力を待ちます。
これが私のコードです:
newline - プログラムを終了するためのキーストロークとしてリターン/エンターをキャプチャする
このプログラムはファイルを読み込み、ユーザーに表示する行数を入力するように求めます。行数が表示された後、さらに行を印刷するか、または Return キーを押して終了するかをユーザーに再度求めるプロンプトが表示されます。
改行や改行をキャプチャして終了するのに苦労しています。戻るボタンを押してもプログラムは終了しませんが、ASCII 値を入力すると終了します (10 は改行の 10 進数です)。
Enterキーが押されたときにプログラムを終了させたい。
c - getcharに結合されたread()からの出力はありません
数時間前に、このコードの理論的側面について質問しました。今ではすべてを理解していますが、そのコードは単に出力を提供しません。http://ideone.com/LWMC5のコードへのリンクは次のとおりです
コード:
出力を生成するにはどうすればよいですか/追加しますか?
c - null 文字の前に追加されるこれらの文字は何ですか?
私は Kernighan と Ritchie の C の本に従っていますが、文字列を扱うのに苦労しています。
次のコードでは、ユーザーから入力された文字列に、ヌル ( ) 文字getchar()
の前に追加のジャンク文字が含まれているように見えます。\0
コードは次のとおりです。
文字配列の各要素を 1 つずつ示す出力を次に示します。これは次のことを意味します。
Array_element: (ascii_number) = ascii_character
要素12と13が見えますか?(要素 14 はおそらくヌル文字です\0
)。ウィスキー。タンゴ。フォックストロット。
そして、これが本当のキッカーです。文字配列を200 ではなく100 要素のみを持つように定義すると、出力は合理的になります。たとえば、単純に置き換えると
char s[200]
と
char s[100]
出力は次のようになります。
(改行文字がどこにあるのかまだわかりません。アスキー文字 #10 ではないですか?)
繰り返しますが、ウィスキー タンゴ フォックストロットです。
ここで何が起こっているのですか?
アップデート
したがって、以下の回答のように、文字配列のサイズを 100 要素または 200 要素に設定したときの出力の違いは、本当に偶然の一致です。初期化されていないメモリでガベージ/ノイズをいじっているだけです。
\0
答えが鋭く示すように、配列を明示的に終了する必要があります。
c - C プログラミング - K&R の例 1.5.2 - 変更されたプログラムが意図したとおりに機能しない
私の質問は、単純に「10 行目と 11 行目のコードが正しく機能しないのはなぜですか?」ということです。私のコードの意図した目的は、元の K&R コードが意図したとおりに実行することですが、(getchar() == '\n') いつでも nc をカウントしないようにすることです。
わずかに変更された K&R コード:
64 ビット Windows 7、CodeBlocks10.05、GNU GCC コンパイラを使用しています。
私の現在の進捗状況と理解:
サンプルの実行では、単語two
を入力して Enter キーを押します。これは 4 つの入力に相当します。その後、ctrl+Z を押して、^Z
または EOF 文字を入力します。次に、プログラムは を出力し1
ます。私はそれが印刷されることを期待していました3
。唯一の論理的な説明は、私が意図したこととは正反対のことをしているということだと思います(改行文字だけを数えますか?)。結局のところ、単語two
を入力してEnterキーを押すと、たとえば4回と表示され4
ます. 入力された改行文字ごとにカウントされているようですがnc
、Enterキーを単独で(この場合は4回)押してからEOFを押すと、常に出力されます0
. さらに実験を重ねた結果、目に見えない 4 はおそらくこのプログラムにとって魔法の数であることがわかりました。起動してEnterキーを正確に(4で割り切れる数)押すと、EOFが出力され0
ます。^Z
ただし、Enter キーを何度か押した場合、EOF は何もしません。whileループを正しく終了するには、2 行ずつ入力する必要があり、出力され1
ます。これは私の心を揺さぶっています!
c - ホームまたは終了を押すときにgetcharから資本Oを取得する
私はこれをCコードで使用しています:
これは宿題の一部ですが、この特定の部分は、課題の要件を超えて私が取り組んでいるものです。
シェルを実装していて、最初にたくさんのコードが与えられています。コードはncurses(できれば使用します)を使用せず、それを変更するには、提供されたコードの多くを書き直す必要があります。
HOMEまたはキーを押すENDと、大文字のO(Openの場合はo)が表示され、次にHOMEandENDキーが表示されます。私はgetchar()
キャラクターを取得するために使用しています。
これを行うのはこれらの2つのキーだけのようですが、よくわかりません。提供されたシステム関数呼び出しだけが異なる場合、私は100%ではありません(stdout
非ブロッキングにも設定していますが、それは問題ではありません)。
本当に混乱していて、ENDキーとHOMEキーをよく使うので実装したいと思います。
あまり情報がないのでごめんなさい。system
-echoと-icanonがsttyにどのような影響を与えるかを実際に理解するには、十分な知識がありません。マニュアルページを見ましたが、それでもわかりません。
編集
アレックスブラウンの答えから、私はエスケープ文字を取得していることを確認しました。私は次のようなものを持っています(悪い擬似コードで):
したがって、エスケープシーケンスからOを出力しますが、[(0x48
forHOMEと0x46
for END)は出力しません。まだ本当のキーコードを取得する方法に困惑しています...