C 言語には、キーボードから配列データを入力できる関数が 2 つあります。gets()
と scanf()
。 scanf() は、フォーマット制御文字 %s を介して配列文字列を入力します。文字列に加えて、他のタイプのデータも入力できます。gets() は配列文字列を直接入力し、文字列のみを入力できます。
ただし、scanf() と gets() には違いがあります。
scanf()
文字列を読み取るときは、文字列はスペースで区切られます。スペースが出現すると、現在の文字列が終了したものとみなされ、スペースを含む文字列は読み取ることができません。
gets()
スペースも文字列の一部であることを考慮すると、文字列の入力は Enter キーが入力されたときにのみ終了するとみなされるため、スペースがいくつ入力されても、 Enter キーが押されていない限り、Enter キーは gets() の完全な文字列です。つまり、gets() は文字列の行全体を読み取るために使用されます。
例:
#include <stdio.h> int main(){ char str1[30] = {0}; char str2[30] = {0}; char str3[30] = {0}; //gets() 用法 printf("Input a string: "); gets(str1); //scanf() 用法 printf("Input a string: "); scanf("%s", str2); scanf("%s", str3); //分别输出 printf("\nstr1: %s\n", str1); printf("str2: %s\n", str2); printf("str3: %s\n", str3); return 0; }
実行結果:
Input a string: C C++ Java Python Input a string: PHP JavaScript str1: C C++ Java Python str2: PHP str3: JavaScript
最初の入力文字列はgets()によって完全に読み取られ、str1に保存されます。 2 番目の入力文字列の前半は最初の scanf() によって読み取られて str2 に格納され、後半は 2 番目の scanf() によって読み取られて str3 に格納されます。
scanf() は、データを読み取るときにデータのアドレスが必要であることに注意してください。これは定数であるため、int、char、float およびその他の型の変数の場合は、アドレスを取得するために前に & を追加する必要があります。しかし、このコードでは文字列の名前だけを指定し、先頭に & を追加していません。これはなぜでしょうか?文字列名または配列名は通常、使用中にアドレスに変換されるため、& を追加する必要はなく、エラーが発生する可能性もあります。
これまでに学んだ知識に関する限り、scanf() で使用する場合、int、char、float などの型の変数は先頭に & を付ける必要がありますが、配列や文字列を先頭に追加する必要はありません。 scanf() で使用され、それ自体がアドレスに変換されます。読者はこのことを念頭に置いておかなければなりません。
配列名(文字列名)とアドレスの変換の詳細と、配列名がアドレスに変換されるタイミングについて。
以上がC言語で配列を入力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。