課題で、入力された2つの整数の差を絶対値を出力するプログラムをつくりました.
整数には、負数を入力される場合も考慮し,入力される数値は、正数の場合は最大8桁まで有効とし、9桁目以降を無視、負数の場合は '-'を含め、最大9桁まで有効とし,10桁目以降を無視します。
今日指導員に見せたところ、「入力した数値を保存する必要はない」、「a[ i ] = atoi( n[ i ] ) は使わないように」、「scanf,get,do-whileを使わないように」等の指導を受けました。
どのように直したらよいか教えてください. お願いします.
下記のプログラムには多々エラーがありますがご指導宜しくお願い致します。
私は自宅ではCPad、会社ではTeraPadを使っています。
#include <stdio.h> #include <stdlib.h> #define SIZE 11 #define TASU_MAX 8 #define HIKU_MAX 9 #define C_NULL ('\0') #define RC_OK 0 /*入力OK*/ #define RC_ND -1 /*入力データなし*/ #define RC_ID -2 /*無効な入力データ*/ #define RC_MD -3 /*負のデータ*/ int absolute( int n1, int n2 ) ; int main(void) { char n[ 2 ][ SIZE ]; int i ; /*文字入力回数のカウント*/ int a[ 2 ] ; /*整数データ*/ int ab ; /*絶対値*/ int count ; /*入力文字個数*/ int n_pos ; /*null付与位置*/ char c ; /*入力文字*/ for( i = 0 ; i < 2 ; i ++ ) { printf( "%d番目の数値を入力 :", i + 1 ) ; for( count = 0 ; count <= SIZE ; count ++ ) { c = getchar() ; /*cが数字もしくは一文字目が-なら*/ if( c >= '0' && c <= '9' || count == 0 && c == '-' ) { n[ count ] = c ; continue ; } } /*改行なら*/ if( c == '\n' ) break ; printf( "Error!! : 数値以外の入力\n" ) ; return( RC_ID ) ; } /*入力文字数が0なら*/ if( count == 0 ) { printf("Error!! : 改行のみまたは、'-'のみの入力\n"); return( RC_ND ); } /*入力が1文字のみかつ-入力なら*/ else if( n[ i ][ 0 ] == '-' && count < 2 ) { printf("Error!! : 改行のみまたは、'-'のみの入力\n"); return( RC_ID ) ; } /*null付与位置の設定*/ /*一文字目が-かつ9文字以上なら*/ if( n[ i ][ 0 ] == '-' && count > HIKU_MAX ) { n_pos = HIKU_MAX ; } else { /*8文字以上なら*/ if( count > TASU_MAX ) { n_pos = TASU_MAX ; } else { n_pos = count ; } } n[ i ][ n_pos ] = '\0' ;/*null付与*/ a[ i ] = atoi( n[ i ] ) ;/*文字列を数字に変換*/ } ab = absolute( a[ 0 ], a[ 1 ] ) ; printf( "%d と %dの差の絶対値は %d \n", a[ 0 ], a[ 1 ], ab ) ; return( RC_OK ); } int absolute(int n1, int n2) { int i ; i = n1 - n2 ; return i >= 0 ? i : -i ; }