問題タブ [kernighan-and-ritchie]
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 マクロ処理
マクロを処理できるC定義プロセッサを作成する最善の方法を考えています。残念ながら、知的なことは頭に浮かびません。Cの場合とまったく同じように動作する必要があるため、次のような式を処理します。
またはこれ:
K&R2 のインストール機能とルックアップ機能については知っていますが、括弧内のテキストを置き換えるには他に何が必要ですか? 誰かアドバイスや疑似コードがありますか? 複雑な作業であることは承知していますが、それでも、最善の方法は何でしょうか?
c - (K&R) 少なくとも内部名の最初の 31 文字は重要ですか?
文字どおりに解釈すれば理にかなっていますが、変数名の有効文字とは正確には何を意味するのでしょうか?
私は K&R を使用した C の初心者です。本からの直接の引用は次のとおりです。
「少なくとも内部名の最初の 31 文字は重要です。関数名と外部変数の場合、言語が制御できないアセンブラーとローダーで外部名が使用される可能性があるため、数は 31 未満である可能性があります。外部名の場合、標準では 6 文字と 1 つのケースのみが保証されます。」
ところで、「一件一件」とはどういう意味ですか?
c - タブストップのリストを受け入れるように detab を変更します
これは、この K&R 演習からの私のバージョンの detab です。
タブストップのリストを引数として受け入れるように detab を変更します。引数がない場合は、デフォルトのタブ設定を使用します。
私の質問は、引数が複数ある場合 (たとえば 5、8、10)、次のタブ ストップがアクティブになるのはいつですか? プログラムは、開始 5 の代わりに TAB_STOP 8 を使用してどの時点で開始する必要がありますか? 改行の後、またはこれを行うにはどうすればよいですか?
また、これらすべてをメインに配置する必要があるのか 、それとも別の機能に固執する必要があるのか もよくわかりません。
編集:これは私が試したことです。
私は正しい軌道に乗っていますか?これは機能しますか?私はまだdetabを変更していません。
c - コンピューターでは、データ型はどの程度正確に表されますか?
私は K&R を読んでいる初心者のプログラマーであり、この本は多くの予備知識を前提としているように感じます。私を混乱させる 1 つの側面は、メモリ内の変数の実際の表現、または存在と言うべきかということです。データ型は変数に対して正確に何を指定しますか? この質問の言い方がよくわかりません...でも、いくつか質問してみると、誰かが首尾一貫した答えをくれるかもしれません。
getchar() を使用する場合、「int」はより多くの値を保持できるのに対し、「char」は 256 個の値しか保持できないため、「char」型よりも「int」型を使用する方がよいと言われました。EOF 値を保持するために変数が必要になる場合があるため、256 文字以上が必要になるか、EOF 値が 256 文字の 1 つと重複します。私の考えでは、これは穴の空いた箱の集まりだと思います。誰かが私により良い表現を与えることができますか? これらの「ボックス」にはインデックス番号がありますか? EOF が 256 の使用可能な値の値と重複する場合、重複する値を予測できますか?
また、これは、char c = 'a' のように変数に手動で値を代入する場合にのみ、データ型「char」を使用しても問題ないということですか?文字?
また、「char」と「int」の実際の重要な違いは何ですか? 「char」タイプの代わりに「int」タイプを使用できる場合、特定の時間に一方を他方よりも優先して使用することに決めたのはなぜですか? 「メモリ」を節約するためですか(「メモリ」が正確にどのように機能するかは実際にはわからないため、引用符を使用します)。
最後に、char 型の 256 個の使用可能な値を正確に取得するにはどうすればよいでしょうか? モジュロ 2^n (n = 8) について読んだことがありますが、なぜそれが機能するのでしょうか (バイナリと関係がありますか?)。「モジュロ 2^n」のモジュロ部分とはどういう意味ですか (モジュロ演算に関連する場合、関係がわかりません...)?
c - 演習5-12がCプログラミング言語の本で何を求めているかを理解するのに助けが必要です
K&R C Programming Language: pg. 105
速記を拡張
entab
しdetab
て受け入れる
entab -m +n
n
つまり、タブは列から始まるすべての列を停止しますm
。
entab
いくつかのスペースをタブ文字に置き換え、detab
その逆を行います。私が持っている質問は、タブストップとentab
です。detab
次のタブストップに到達するために必要なスペースの数を決定するのは非常に簡単なので、心配する必要はありません。を使用entab
すると、タブ文字がそれ自体のタブストップにどれだけ大きくなるかを確実に知ることができないため、スペースをタブに置き換えるのは少し難しくなります(確実に知る方法がない限り)。
私もこのことをきちんと考えていますか?
c - K&R 演習 4-6 の解が見つからない
K&R では、RPN を作成することができました。
ここでの演習は次のとおりです。
変数を処理するコマンドを追加します (26 個の変数に 1 文字の名前を付けるのは簡単です)。最近出力された値の変数を追加します。
したがって、これは Python インタープリターのように動作することを意図しており、次のことができます。
または A = 5 _ + A (10 を出力)
などなどですが、Cでどのように処理したいのかよくわかりません。ただ困惑しています。
c - Cの空白のエスケープシーケンスは何ですか?
空白、タブ、改行を数えるプログラムを書いています。タブと改行のエスケープ シーケンスを覚えていますが、空白はどうでしょうか。\b
? それともバックスペースですか?
c - この C プログラムがエスケープされたバックスラッシュを認識しないのはなぜですか?
K&Rの演習1-10をやっています
\t
各タブを、バックスペースを\b
、バックスラッシュをで置き換えて、入力を出力にコピーするプログラムを作成します\\
。これにより、タブとバックスペースが明確に表示されます。
私はこれを思いつきました...
何らかの理由で、バックスラッシュに触れることを拒否します。たとえば、Hello how\ are you?
isのような文字列が与えられたときのプログラムからの出力はHello\thow\ are you?
、タブは OK に変換されましたが、バックスラッシュは変換されなかったことを意味します。
私は何か間違ったことをしていますか?
c - この小さなCプログラムは、K&Rの演習を満たしていますか?
K&Rの演習1-18に進みます
入力の各行から末尾の空白とタブを削除し、完全に空白の行を削除するプログラムを作成します。
これは私がこれまでに思いついたものです
行に空白またはタブしかない場合に何を返す必要があるかわからなかったため、2番目の部分は難しいように聞こえました。結局のところ、0を返すと、getline()
呼び出しが停止します。#define
これは、などのを設定する必要がある場所でしょうかALL_BLANKS
。
とにかく、実際の主な質問に対して、これは行から末尾の空白とタブを削除する正しい方法ですか?いくつかの入力を実行しましたが、うまくいったようです。ただし、改行を含むテキストをコピーしてCLに貼り付けると、すべてがつなぎ合わされて表示されます。また、CLに行を入力してEnterキーを押すと、自動的に印刷されます。行の配列を作成し、完了したらループして印刷する必要がありますか?
c - C : (動的サイズの) 文字列を動的に格納しますか?
信じられないほど単純なものが欠けていますか?私のコードが文字列を動的に保存していない理由が見つからないように見えるからです。最後に印刷すると、空白行しか表示されません。任意の行数の最後の「n」行を出力することになっています。ただし、実際の行の保存に問題があるようです。誰か手を貸してくれませんか?
ちなみに、これはHWではありません。これは K&R の本の問題です (その回答はオンラインです)。私は独学でCを学ぼうとしています。