C ユーザー入力
ユーザー入力
C で値を出力するために printf()
が使用されることはすでに学習しました。
ユーザー入力を取得するには、scanf()
関数を使用できます。
例
ユーザーが入力した数値を出力します。
// Create an integer variable that will store the number we get from the user
int myNum;
// Ask the user to type a number
printf("Type a number: \n");
// Get and save the number the user types
<strong>scanf</strong>("%d", &myNum);
// Output the number the user typed
printf("Your number is: %d", myNum);
scanf() 関数は 2 つの引数を取ります。変数の形式指定子 (上記の例では %d) と、変数のメモリ アドレスを格納する参照演算子 (&myNum) です。メモリのアドレスと関数については、次の章で詳しく説明します。
複数の入力
scanf()
関数では、複数の入力 (次の例では整数と文字) も許可されます。
例
// Create an int and a char variable
int myNum;
char myChar;
// Ask the user to type a number AND a character
printf("Type a number AND a character and press enter: \n");
// Get and save the number AND character the user types
<strong>scanf("%d %c", &myNum, &myChar);</strong>
// Print the number
printf("Your number is: %d\n", myNum);
// Print the character
printf("Your character is: %c\n", myChar);
文字列入力を取る
ユーザーが入力した文字列を取得することもできます。
例
ユーザーの名前を出力します。
// Create a string
char firstName[30];
// Ask the user to input some text
printf("Enter your first name: \n");
// Get and save the text
scanf("%s", firstName);
// Output the text
printf("Hello %s", firstName);
注: scanf() で文字列を操作する場合、文字列/配列のサイズを指定する必要があります (この例では 30 という非常に大きな数値を使用しましたが、少なくとも名前に十分な文字が格納されることは確実です)。 参照演算子 (&) を使用する必要はありません。
ただしscanf()
関数にはいくつかの制限があります。スペース (空白、タブなど) を終了文字と見なすため、(多くの単語を入力しても) 1 つの単語しか表示できません。例えば:
例
char fullName[30];
printf("Type your full name: \n");
scanf("%s", &fullName);
printf("Hello %s", fullName);
// Type your full name: John Doe
// Hello John
上記の例から、プログラムは "John Doe" を出力すると予想しますが、"John" しか出力しません。
そのため、文字列を操作するときは、fgets()
する機能テキストの行を読む.次の引数を含める必要があることに注意してください: 文字列変数の名前sizeof
(*string_name*)、 およびstdin
:
例
char fullName[30];
printf("Type your full name: \n");
fgets(fullName, sizeof(fullName), stdin);
printf("Hello %s", fullName);
// Type your full name: John Doe
// Hello John Doe
scanf()
関数を使用して 1 つの単語を入力として取得し、fgets()
を使用して複数の単語を取得します。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。