では、ユーザーから文字列をしてもらい、それを表示するプログラムを作りましょう。
1|/* strinput01.c */ 2| 3|#include <stdio.h> 4| 5|int main(void) 6|{ 7| char szStr[32]; 8| 9| printf("文字列を入力してください---"); 10| scanf("%s", szStr); 11| printf("入力した文字列はは「%s」です。\n", szStr); 12| return 0; 13|}
文字列を入力してください---HelloWorld 入力した文字列はは「HelloWorld」です。 文字列を入力してください---Hello World 入力した文字列はは「Hello」です。
「Hello World」のようにスペースの入った文字列を入力の区切りとみなし、思ったような結果になりません。
そこで登場するのが gets 関数です。この関数はスペースも受け取ることができます。改行文字はヌル文字に変換されます。
char *gets( char *buffer );
1|/* strinput02.c */ 2| 3|#include <stdio.h> 4| 5|int main(void) 6|{ 7| char str[64]; 8| 9| printf("文字列を入力してください---"); 10| fgets(str, 64,stdin); 11| printf("入力した文字列は%s", str); 12| return 0; 13|}
文字列を入力してください---hello world 入力した文字列はhello world
もう少し改良して見ましょう。
1|/* strinput03.c */ 2| 3|#include <stdio.h> 4|#include <string.h> 5| 6|int main(void) 7|{ 8| char str[64]; 9| 10| while(1){ 11| printf("文字列を入力してください---"); 12| fgets(str, 64,stdin); 13| 14| if(strcmp (str, "\n") == 0){ 15| break; 16| } 17| printf("入力した文字列は%s", str); 18| } 19| return 0; 20|}
文字列を入力してください---こんにちは 入力した文字列はこんにちは 文字列を入力してください---さん ぴん 花 茶 入力した文字列はさん ぴん 花 茶 文字列を入力してください---
何も入力せずに Enter キーを押すと、 str は "\n" となります。このとき、strcmp 関数は文字列を比較して同じとみなし、0を返します。break 文で無限ループを抜けて、プログラムを終了します。
もう少し気の利いたものに書き換えることができます。
1|/* strinput04.c */ 2| 3|#include <stdio.h> 4|#include <string.h> 5| 6|int main(void) 7|{ 8| char str[64], *s = "文字列を入力してください---"; 9| 10| printf("%s",s); 11| 12| while (strcmp (fgets(str, 64, stdin), "\n")) { 13| printf("入力した文字列は%s", str); 14| printf("%s",s); 15| } 16| 17| return 0; 18|}
文字列を入力してください---hello 入力した文字列はhello 文字列を入力してください---hello world 入力した文字列はhello world 文字列を入力してください---