/* Part8 演習問題2 */
/* 関数scanfを関数getsで代替 */
#include <stdio.h>
#include <string.h>

int main(void)
{
  int num ;       /* 変換後の整数 */
  char buf[10] ;
  int ns ;        /* 文字列の文字数 */
  int i ;

  printf("正の整数(9桁以下): ") ;
  /*  scanf("%d",&num) ; */
  if(gets(buf)==NULL) {
    printf("入力に失敗しました\n") ;
    return(1) ;
  }

  ns=strlen(buf) ;
  if((ns==0)||(ns>9)) {
    printf("入力データの桁数が誤りです。\n") ;
    return(1) ;
  }

  /* 文字列を整数に変換 */
  num=0 ;
  for(i=0;i<strlen(buf);i++) {
    if((buf[i]>='0')&&(buf[i]<='9')) {
      num = num*10 + (int)buf[i]-48 ;
    }
    else {
      printf("入力データが正の整数ではありません。\n") ;
      return(1) ;
    }
  }

  printf("入力された整数は %d です。\n",num) ;
  return(0) ;
}


% gcc -Wall part8-2.c
% ./a.out
正の整数(9桁以下): -123
入力データが正の整数ではありません。
% ./a.out
正の整数(9桁以下): 1234567890
入力データの桁数が誤りです。
% ./a.out
正の整数(9桁以下): 12345
入力された整数は 12345 です。
% ./a.out
正の整数(9桁以下): 0
入力された整数は 0 です。
% ./a.out
正の整数(9桁以下): 987654321
入力された整数は 987654321 です。

  1. 1番目および2番目の例は,入力データに誤りがある場合である..
  2. 3番目から5番目の例は,入力条件を満たすデータであり,正しい整数が出力されている.