5.2   scanf()で、”山田 太郎”と入力したくても”山田”しか入力できていない。


# include <stdio.h>
main( )
{
  char s[100] ;
  printf ("氏名を入力して下さい\n") ;
  scanf("%s",s) ;
  printf(" 氏名は「%s」です。",s\n) ;
}

これを実行して氏名に ”山田   太郎”と入力すると、実行結果は、

氏名は「山田」です。

  となります。”太郎”の部分は出力されません。これは、scanf( )関数が空白文字を区切りとみなしてしまうからです。よって、”山田”と”太郎”の間の空白文字が区切りとみなされ、”山田”の部分しか入力されなかったのです。

それでは、文字列の最後のヌル文字’\0’までを配列sに格納するようにプログラムを作ってみましょう。

# include <stdio.h>

main( )
{
  char c;
  char s[100] ;
  int i ;
  for( i=0 ; i<100, i++ ) {
      scanf("%c",&c) ;          /* 1文字ずつ読み込む */
      if (c=='\n')
         {  s[i] = '\0' ;            /* ヌル文字なら終了 */
            break ;
          }
      else
        s[i] = c ;                  /* 文字を配列に格納 */
      }
  printf("氏名は「%s」です。",s) ;
}

 


「もくじへ」