logo

C の printf() と scanf() の違い

導入:

Printf() そして Scanf() を実行する C 言語の組み込みライブラリ関数です。 フォーマットされた入力 そして フォーマットされた出力 機能。これらの関数は次のように定義および宣言されます。 stdio.h ヘッダー ファイル 。の 「ふ」 プリントフ そして スキャンフ を意味する 「フォーマット済み」 。したがって、両方の関数 printf() そして scanf() フォーマット文字列内のコードを使用して、出力値または入力値のフォーマット方法を指定します。使用するにはヘッダー ファイルをインポートする必要があります printf() そして scanf() :

 #include 

この記事では、printf() と scanf() の違いについて説明しますが、違いを説明する前に、printf() と scanf() について、その構文と例について知っておく必要があります。

Printf():

それ プリント 間の何か 二重引用符 形式指定子 %c、%d、%f、 など、変数または定数の値を表示し、次のようなエスケープ シーケンス文字を含めることもできます。 のために 改行、 そして 水平タブ 、 それぞれ。

パイソンが含まれています

構文:

 printf('(string) %format_specifier (string)',variable); 

Scanf():

これにより、ユーザーがコンソールのキーボードから入力した 1 つまたは複数の値を読み取ることができます。いくつでも配置できます フォーマット指定子 フォーマットの有無にかかわらず、必要なだけ入力できます。

構文:

 scanf(%format_specifier, &pointer_to_variable); 

形式指定子の文字列:

の最初のパラメータでは、 プリントフ そして スキャンフ 、合格します フォーマット文字列 または フォーマット指定子の文字列 、そしてユーザーが入力する値のタイプを指定します。

データ・タイプ 変換 フォーマット文字列
整数 短整数 %d または %i
短い署名なし % で
長い署名 %ld
長い間署名されていない %ル
符号なし16進数 % バツ
符号なし 8 進数 %O
本物 浮く %f または %g
ダブル %lf
サイン入り文字 %c
符号なし文字 %c
%s

たとえば、ユーザーが次のように入力すると、 二十 入力として、として 二十 です 10進整数値 を使用して、C のすべての 10 進整数値を指定します。 %d 形式指定子 。同様に、 浮動小数点値 を使用して指定されます %f

Printf() および Scanf() の基本コード:

例 1:

 #include int main() { int a, b; int sum = 0, sub = 0, mul = 0; printf('Please enter the two values:'); /* Read input */ scanf('%d%d', &a, &b); sum = a+b; sub = a-b; mul = a*b; /* Print output */ printf('The sum = %d 
sub = %d 
mul = %d', sum, sub, mul); return 0; } 

出力:

 Please enter the two values:8 6 The sum = 14 sub = 2 mul = 48 

説明:

上記のプログラムでは、 scanf() コンソールから入力を読み取り、変数に保存します。 aとb。 その後、次のような算術演算を実行します。 追加 引き算 、 そして 乗算 そして後で結果を 3 つの新しい変数 (Sum、Sub、Mul)。 最後に、 printf()関数 、結果を印刷しています。

例 2:-

 #include int main() { int a; scanf('%d %d', &a); printf('Execution finished...'); return 0; } 

上記のプログラムでは、 scanf() を指定したため、1 つの変数を渡しているにもかかわらず、プログラムから 2 つの入力を読み取ります。 2 つの形式指定子 。常に覚えておいてください、 scanf()/printf() 全ての フォーマット指定子 渡すものは同じである必要があります。そうしないと、予期しない実行時エラーが発生する可能性があります。

例 3:

 int main() { int a, b; scanf('%d', &a, &b); printf('Execution finished...'); return 0; } 

出力:

 5 Execution finished... 

説明:

aws赤方偏移

上記のプログラムでは、 scanf() のみを指定したため、ユーザーからの入力は 1 つだけ読み取ります。 1 つの形式指定子 。したがって、この例から、次の数に応じて入力はいずれも取得されないという結論になります。 フォーマット指定子

例 4:

 #include int main() { int a; scanf('%d', a); printf('Execution finished'); } 

出力:

 6 Segmentation fault 

説明:

上記のプログラムでは、変数の値をに渡しています。 scanf() 変数アドレスの代わりに。それは、 ランタイムエラー 。 Linux では、セグメンテーション違反エラーが発生します。

Javaの配列のlen

例 5:

 #include int main() { int a = 10; int b = 20; printf('the value of a = %d, the value of b = %d', a, b); } 

出力:

 the value of a = 10, the value of b = 20 

説明:

上記のプログラムの場合、 プリントフ フォーマット文字列をスキャンすると、 形式指定子 (%d) に渡す実際の値を使用して printf() 。つまり、最初の書式指定子は、渡した最初の値に置き換えられます。 printf()、 等々。

Printf() と Scanf() の基本的な違い

printf と scanf のいくつかの違いは次のとおりです。

    printf()関数 データを標準出力、つまりコンソールに出力します。対照的に、 scanf()関数 標準入力、つまり入力デバイスからデータを読み取ります printf() まれにポインタを使用する場合もありますが、 scanf() 常にポインタを使用して、指定された変数に値を割り当てます。 printf() そして scanf() どちらも同じ戻り値の型を持ちます 整数 。の printf() はコンソールに正常に表示された文字数を返します。 scanf() 戻り値 0、1、または EOF 提供された形式指定子に基づきます。