課題で、入力された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 ;
}