35

基本的にユーザーが「Enter」を押してから何かをするのを待つ関数を書いています。テスト時に機能することがわかったのは次のとおりです。

#include <stdio.h>

int main()
{
        int x = getc(stdin);
        if (x == '\n') {
                printf("carriage return");
                printf("\n");
        }
        else {
                printf("missed it");
                printf("\n");
        }
}

私が持っている質問と、私が最初に試みたのは実行することでした:if (x == '\r')しかし、テストでは、プログラムは私がエンターを押したことをキャッチしませんでした. は'\n'、コンソールからエンターを押すことに対応しているようです。誰かが違いを説明できますか?また、確認のため、 と書くとif... == "\n"文字列リテラル?つまり、ユーザーは文字通り"\n"コンソールから入力する必要がありますよね?

4

4 に答える 4

61

\nは改行文字、\rはキャリッジ リターンです。それらは、それらを使用するものが異なります。Windows では\r\n、Enter キーが押されたことを示すために使用されますが、Linux と Unix では\n、Enter キーが押されたことを示すために使用されます。

したがって、\nすべての人が使用しているため、常に使用します。if (x == '\n')文字の等価性をテストする適切な方法です。

于 2012-04-07T23:21:37.330 に答える
18

「\n」は「改行」、「\r」は改行です。オペレーティング システムが異なれば、次のように新しい行を異なる方法で処理します。

ウィンドウズ

改行は 2 つの文字 '\r\n' の組み合わせである必要があります。

Linux\Unix および最新の Mac OS

改行には単一の '\n' を使用します。

クラシック Mac OS

改行には単一の '\r' を使用します。

基本的に、if (x == '\n')現在のすべてのオペレーティングシステムで現在使用されているものを使用します。

于 2012-04-07T23:24:24.143 に答える
3

また、25 文字を入力して Enter を入力した場合、25 文字getcすべてを入力して Enter キーを押すまで、最初の文字は返されないことに注意してください。入力時に文字を読み取るには、プラットフォーム固有のコードが必要です。fgetsしたがって、文字列に実行し、改行をトリミングし、入力行全体を処理することで、行全体を読み取る方がよい場合があります。

于 2012-04-08T04:56:08.473 に答える