C言語 - データの入出力

序文:

C言語には特別な入出力文はなく、C言語の入出力はライブラリ関数によって実現されます。

1. フォーマット入出力関数

1. フォーマット出力関数 printf()

形式:
printf ("形式制御文字列", 出力リスト);
機能:
形式制御文字列で指定された形式に従って出力デバイス (通常はディスプレイ) に出力し、リスト内の各出力項目の値を出力します。
例:
ここに画像の説明を挿入
形式制御: 二重引用符で囲まれた文字列は、出力形式を指定するために使用されます。
— 通常文字:そのまま出力される文字です。
—形式の説明: 出力データの出力形式を指定するために使用されます。
形式: %[修飾子] 形式の文字
出力リスト: カンマで区切られた、出力されるデータのリストには、任意の正当な表現を使用できます。
ここに画像の説明を挿入
ここに画像の説明を挿入

補足:
ここに画像の説明を挿入
説明:
1) d フォーマット文字。
機能: 符号付き 10 進整数を出力します (正の数値は符号を出力しません)
形式:
ここに画像の説明を挿入
例:

#include <stdio.h>
int main()
{
    
    
    int x = 123;
    printf("|%d|\n", x);
    printf("|%5d|\n", x);
    printf("|%-5d|\n", x);
    printf("|%+5d|%+5d|\n", x,-x);
    printf("|%-5d|%-5d|\n", x,-x);
    printf("|%2d|\n", x);
    return 0;
}

テスト:
ここに画像の説明を挿入
2) o、x、および u 形式の文字。
機能: 符号なし 8 進数、16 進数、または 10 進数の符号なし整数を出力します。
3) c フォーマット文字。
機能: 文字を出力するために使用されます。
注:
0~~127 の整数は文字形式で出力することもでき、システムは整数を対応する ASCII コード文字に変換します。
4) s フォーマット文字。
機能: 文字列を出力するために使用されます。
フォーマット:
ここに画像の説明を挿入
5) f フォーマット文字。
機能: 単精度および倍精度実数を 10 進形式で出力します。
フォーマット:
ここに画像の説明を挿入
6) e フォーマット文字。
機能: 標準化された指数の形式で実数を出力します。(小数点の前にゼロ以外の数値が 1 つだけ存在する必要があります)
形式:
ここに画像の説明を挿入
例:

#include <stdio.h>
int main()
{
    
    
    char ch = 'a';
    float x = 123.456f;
    double y = 321.564321;
    float f = 123.456f;
    printf("%3c\n",ch);
    printf("%8.2s\n","computer");
    printf("%f\n",x);
    printf("%.0lf\n",y);
    printf("%10.2e\n", f);
return 0;
}

テスト:
ここに画像の説明を挿入
:
出力テーブルの列には、変数、定数、配列要素、関数参照、および演算子を含む式を使用できます。
例: printf("%f%d%d%f", 3.14, a+b, x, cos(y)); 出力
リスト内の各出力項目と各形式指定は、左から右の型に一致する必要があります。一つずつ。
実数データを %d で出力すると結果はエラーとなり、整数データを %f で出力すると結果は 0 になります。
出力項目よりもフォーマット文字が多い場合は、余分な出力項目は不定値を出力し、出力項目よりもフォーマット文字が少ない場合は、余分な出力項目は出力されません。
出力テーブル列の評価順序: vc は右から左に評価され、出力は依然として左から右に行われます。
フォーマット文字のフィールド幅の前に 0 を追加して 0 を構成できます。
例: printf(“|%-05d|\n”,12); //output |12 |
printf(“|%05d|\ n”, 12); //Output|00012|
X、E、G フォーマット文字を除き、他のフォーマット文字は小文字を使用する必要があります。

2. フォーマット入力関数 scanf()

形式:
scanf ("フォーマット コントロール", アドレス リスト);
機能:
フォーマット コントロールで指定された形式に従って、指定された入力デバイス (通常はキーボード) から指定された変数にデータを入力します。
ここに画像の説明を挿入
書式制御:
・普通文字:文字をそのまま入力します。
— 形式の説明: 入力データの入力形式を指定するために使用されます。
形式: %[修飾子] 形式の文字。
アドレスリスト: 変数のアドレスを指定します。
- アドレスは「&」演算によって取得されます。
—「&」は、メモリ内の変数のアドレスを取得するアドレス演算子、単項演算子、および右結合性です。
ここに画像の説明を挿入

ここに画像の説明を挿入
フォーマット入力の使用と注意:
1) データを入力するときに使用する区切り文字は、フォーマット制御の区切り文字と一致している必要があります。
書式制御に通常の文字がない場合、スペース、タブ キー、およびキャリッジ リターン キーを数値データを入力するための区切り文字として使用できます。
例:
int a, b; float f, e;
scanf("%d%d",&a,&b);//スペース 23 個、キャリッジ リターン 456 個を入力
2) データ入力時に精度は指定できませんが、幅は指定できません。を指定することができます。
例:scanf("%7.2f", &a);//修飾子エラー
3) 入力形式文字「*」はデータが代入されていないことを意味します。
例: scanf ("%d%*d%d", &a, &c);
入力: 12 スペース、34 スペース、567 キャリッジリターン; 出力 a=12、c=567、34 はスキップされます
4) 符号なし数値は % にすることができますd、%o、%x 形式の入力。
5) c 形式文字を使用して文字を入力する場合、有効な文字はスペースとエスケープ文字です。(——> キャリッジ リターン)
scanf ("%c%c%c", &a, &b, &c); 次のように
入力した場合: A スペース B スペース C キャリッジ リターン //その後、a=A、b=スペース、c= BIf
AEnter BEnter// その後、a=A、b=Enter、c=B
6) %d、%f、%s などが数値を読み取る場合、先頭の空文字はスキップされます。スペース、キャリッジリターン、タブキーに出会った場合、幅の終わりに出会った場合、数字以外の文字の場合は
、データ入力が終了したとみなします。(x など) 7) Double は %lf (または %le) を使用する必要があります。float は %f (または %e) を使用する必要があります。 例:





#include <stdio.h>
int main()
{
    
    
    int a; float b; char c;
    scanf("%2d%3f%c", &a, &b, &c);
    printf("a=%d,b=%f,c=%c\n", a, b, c);
    return 0;
}

ここに画像の説明を挿入
注:
書式記号 %f%c の間にスペースを入れることはできず、直接入力する必要があります。

2. 文字入出力機能

1. 文字出力関数 putchar()

形式:
putchar(c);
機能:
端末に文字を出力します。
注:
c はパラメータであり、文字変数、整数変数、文字定数、式、またはエスケープ文字を使用できますが、文字列ではなく単一の文字のみにすることができます。

2. 文字入力関数 getchar()

形式:
getchar();
機能:
キーボードから文字を読み取ります。
char ch=getchar();
説明:
読み取ることができるのは 1 文字だけであり、この文字は文字変数、整数変数、または式の一部として割り当てることができます。

3. 文字列入出力関数

1. 文字列出力関数 put()

形式:
Puts (文字配列名); Puts (文字列);
機能:
文字配列の値を出力し、'\0' に遭遇すると出力を終了します。
説明:
—puts() は一度に 1 つの文字列のみを出力でき、文字列の出力後に自動的にラップ (\n) され、エスケープ文字を出力できます。

2. 文字列入力関数gets()

形式:
gets (文字配列名);
機能: 入力文字列を文字配列に割り当てます。入力時、最初のキャリッジ リターン キー (\n) で出力が終了します (スペースやタブを終了することもできます)。
説明:
関数 get() は、一度に 1 つの文字列のみを入力できます。

第四に、機能の違い

1.gets()関数とscanf()関数の違い

——gets() 関数は scanf() 関数と同じで、文字列を読み取った後、システムは文字列の後に文字列終了マーク '\0' を自動的に追加します。
——gets() は Enter で入力を終了しますが、スペースは受け入れられ、最後の復帰は破棄されます。また、gets() は複数の文字を読み取ることができます。
相違点:
scanf はスペース、タブ、およびキャリッジ
リターンを受け入れることができません。get はスペース、タブ、およびキャリッジ リターンを受け入れます。scanf
: キャリッジ リターンが発生すると、スペース キーとタブ キーは文字列 0 の末尾に自動的に「\」を追加します。 ' ただし、キャリッジ リターン、スペース、タブ キーは入力バッファ内に残ります。
取得: Enter キーの前に入力されたすべての文字を受け入れ、'\n' を '\0' に置き換えます。Enter キーは入力バッファーに残りません。

#include <stdio.h>
int main()
{
    
    
    char str1[20], str2[20];
    gets(str1);
    scanf("%s", str2);
    printf("str1:%s\n", str1);
    printf("str2:%s\n", str2);
    return 0;
}

テスト:
ここに画像の説明を挿入

2. Puts() 関数と printf() 関数の違い

——puts() 関数は一度に 1 つの文字列のみを出力でき、文字列の出力後に自動的に (\n) をラップし ('\0' を '\n' に自動的にラップします)、エスケープ文字を出力できます。
——printf()関数は複数の文字列を同時に出力でき、行を折り返すかどうかを柔軟に制御できます。
例:

#include <stdio.h>
int main()
{
    
    
    char str1[] = "student", str2[] = "teacher";
    puts(str1);//自动\n
    puts(str2);
    printf("%s", str1);
    printf("%s\n%s", str1,str2);
    return 0;
}

テスト:
ここに画像の説明を挿入

3. getchar() 関数と scanf() 関数の違い

- 標準入力(キーボード)から次の文字を読み込みます。戻り値はユーザーが入力した ASCII コードで、エラーが発生した場合は -1 が返されます。ユーザーが入力した文字は、Enter キーが押されてバッファから文字が抽出されるまで、キーボード バッファに保存されます。ストリームの最初の文字。
違い:
scanf が復帰 (Enter) またはスペースに遭遇すると、TAB は入力を終了し、スペースを受け取りません。
getchar 関数は、入力を復帰と Enter でのみ終了し、スペース文字を受け入れます。
scanf は入力後の最後のキャリッジ リターンを破棄しません (つまり、キャリッジ リターンはバッファ内に残ります)。
getchar キャリッジ リターンは終了記号として使用されるため、キャリッジ リターンがヒットしたときに '\n' もキャッシュに格納されます
。 () は、数字を読み取るときにスペース、キャリッジ リターン (Enter)、タブ、改行をスキップします。
getchar 関数は文字の入力のみが可能で、入力中に Enter キーが押されると文字がバッファから順番に抽出されます。

コード 1:

#include <stdio.h>
int main()
{
    
    
    char c1=0, c2=0;
    c1=getchar();//\n留在缓冲区
    c2 =getchar();//遇到\n什么都没输出
    printf("%c,%c", c1,c2);
    return 0;
}

ここに画像の説明を挿入

コード 2:

#include <stdio.h>
int main()
{
    
    
    char c1=0, c2=0;
    c1=getchar();
    getchar();
    c2 =getchar();
    printf("%c,%c", c1,c2);
    return 0;
}

テスト:
ここに画像の説明を挿入

改善:
キャリッジ リターンを使用するために getchar() を使用する必要がある状況がいくつかあります。

  1. 前に scanf があり、後ろに scanf() がある場合、キャリッジ リターンを食べるために空の getchar() を真ん中で使用する必要があります。
  2. 先頭に scanf があり、後で ch=getchar() を使用して文字を受信する場合、キャリッジ リターンを使用するために中央で空の getchar() を使用する必要があります。
  3. キャリッジリターンを使用するには、2 つの ch=getchar() の間に空の getchar() が必要です。

4. putchar() 関数と printf() 関数の違い

-putchar(a) は端末に文字を出力します。ここで、 a は単一引用符で囲まれた文字 [putchar('e')]、0 ~ 127 (0 と 127 を含む) の 10 進整数 [putchar(23)]、または事前に定義された文字変数です。 char を使用し、単一文字のみを出力できます。
——printf() 形式の出力関数。指定した形式で情報を標準出力デバイスに出力するために使用されます。さまざまなデータ型を出力でき、パラメータを持つこともできます。
違い:
putchar には戻り値があり、戻り値は () 内のパラメーター値に変換された unsigned int 値です。エラーが発生した場合、またはファイルの終わりの場合、putchar() は EOF を返しますが、printf() は関数は文字列の長さを返します。
テスト:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/plj521/article/details/131316690
おすすめ