文字列の入力


では、ユーザーから文字列をしてもらい、それを表示するプログラムを作りましょう。

ソースコード

源文件
  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
文字列を入力してください---


Chapte7 @ C言語目録 @ HomeWork List @ 昭亮's Homepage