C言語のキャリッジリターンと改行の問題

キャリッジ(キャリッジリターン、 '\ R')とラインフィード(改行、 '\ n')

ASCII値10は13に対応するラインフィード、キャリッジリターンのASCII値に対応し、それに留意されたいユーザが押下するキー入力異なるためとき、文字入力機能異なる文字を読み取るために、以下のコード

 

テスト1:

INT メイン()
{ 
    チャーCH。

    CH = GETCHAR()。
    printf(" %d個の\ n " 、CH)。
}

結果:

 

テスト2:

INT メイン()
{ 
    チャーCH。

    CH = getchは()。
    printf(" %d個の\ n " 、CH)。
}

結果:

 

テスト3:

INT メイン()
{ 
    チャーCH。

    CH = getcheは()。
    printf(" %d個の\ n " 、CH)。
}

結果:

 

テスト4:

INT メイン()
{ 
    チャーCH。

    scanf関数(" %のC "、&CH); 
    printf(" %d個の\ n " 、CH)。
}

結果:

 

以上の結果から分かるように、入力が(注意「ENTER」されているが、リターンキーがないキャリッジリターン)が、得られた結果に違いがある、 Windowsシステムにインクルードキーは次のように扱われるENTER:\ことに注意してRの\ nは、我々は、キーボードからのキー入力を返すとき、Windowsシステムは、(上記の4つの文字クラスの結果を読み取るためだけ異なる入力機能を処理するために、\ rをする\ nとキーを入力します使用されています

getchar--改行文字 '\ n' は(ASCII値10)

getch--キャリッジリターン '\ R'(ASCII値13)

getche--キャリッジリターン '\ R'(ASCII値13)

scanf——换行符'\n' (ASCII值为10)

回车:使光标移到行首

换行:使光标移到下一行

 

下面再补充下文件操作函数,从文本文件(txt文件)用fscanf_s读取(前提条件:先创建一个txt文件按一下回车键,然后保存)

char ch;
FILE *fp;
errno_t err;

err = fopen_s(&fp, "E:\\ww.txt", "r");
fscanf_s(fp, "%c", &ch, sizeof(ch));

printf("%d\n", ch);

运行效果:

从上面可以看出fscanf_s和scanf对回车键的读取是相同的,都是得到的换行符'\n'(ASCII值为10)

 

使用fgetc读取

int main()
{
    char ch;
    FILE *fp;
    errno_t err;

    err = fopen_s(&fp, "E:\\ww.txt", "r");
    ch = fgetc(fp);
    printf("%d\n", ch);
    if (ch == '\r')
    {
        printf("***");
    }

    return 0;
}

运行结果:

 

从上面的结果可以看出fgetc和fscanf_s读取的字符相同,都是读取到的换行符'\n'(ASCII值为10)

おすすめ

転載: www.linuxidc.com/Linux/2019-08/159762.htm