アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語の初心者です。
今、VC 6.0の環境で電卓を作っています。
エディットボックスに数値を入力して計算させるプログラムなのですが
エディットボックスにスペースを入力されても計算出来るようにしたいのですが解りません。
NULL文字をチェックすればよいのか、それとも「isspece」の関数を使って空白文字を調べればよいか解りません。プラス「+」、マイナス「-」の符合が入力されても計算出来るようには行えたのですが、どうしても空白(スペース)を入力された場合が、うまくいきません。
作成途中のソースコードです。ご指導お願いします。

// OnButton1() /////////////////////////////////////////////////////////////////////
void CKasanDlg::OnButton1()
{
adding();

char num1[128],num3[128];
int i,length=strlen(&num1[0]);
int numk,numl=0;

m_num3.GetLine( 0, num3 );
numk = sscanf( num3, "%d", &numl );

for( i=0; i<length; i++ ){
isdigit( (int) num1[i] );
}

if(( numk == -1 )){
MessageBox("数値を入力してください。"); // メッセージボックス
}
}

// 足算 (num) /////////////////////////////////////////////////////////////////
void CKasanDlg::adding()
{
char num1[128],num2[128];
int number1=0, number2=0,sum=0;
CString ans;
int nums,numa;
int i=0, m=0, add1=0,add2=0;

m_num3.SetSel( 0,-1 );
m_num3.Clear();

m_num1.GetLine( 0, num1 );
int length1 ;

if(( num1[ 0 ] == '-' ) || ( num1[ 0 ] == '+' )){
length1 = strlen ( &num1[1] );
for( i=0; i<length1; i++ ){
add1 = isdigit( (int)num1[i+1] );
if( add1 == 0 ){
MessageBox("10進数字以外の値が入力されています。\n(足算・左側)");
break;
}
}
}
else{
length1 = strlen ( &num1[0] );
for( i=0; i<length1; i++ ){
add1 = isdigit( (int)num1[i] );
if( add1 == 0 ){
MessageBox("10進数字以外の値が入力されています。\n(足算・左側)");
break;
}
}
}

m_num2.GetLine( 0, num2 );
int length2;

if(( num2[ 0 ] == '-' ) || ( num2[ 0 ] == '+' ) || ( num2[ 0 ] == ' ' )){
length2 = strlen ( &num2[1] );
for( m=0; m<length2; m++ ){
add2 = isdigit( (int)num2[m+1] );
if( add2 == 0 ){
MessageBox("10進数字以外の値が入力されています。\n(足算・右側)");
break;
}
}
}
else{
length2 = strlen (&num2[0]);
for( m=0; m<length2; m++ ){
add2= isdigit((int)num2[m]);
if( add2 == 0 ){
MessageBox("10進数字以外の値が入力されています。\n(足算・右側)");
break;
}
}
}
if((add1 == 0 ) && ( add2 == 0)){
return ;
}
if((add1 == 0 ) && ( add2 != 0)){
return ;
}
if((add1 != 0 ) && ( add2 == 0)){
return ;
}
nums = sscanf( num1, "%d", &number1 );
numa = sscanf( num2, "%d", &number2 );

if(( nums == 1) && ( numa == 1)){
sum = number1 + number2;
ans.Format( "%d",sum );
m_num3.SetSel( 0, -1 );
m_num3.Clear();
m_num3.ReplaceSel( ans );
}
}
///////////////////////////////////////////////////////////////////////////////

A 回答 (3件)

こんにちは


ソースを読ませていただきまして、一言。

問題を取り違えているような気がします。
電卓の製作はよく課題として登場してきますが、多くはn桁電卓製作です。
配列に1桁ずつ数値に直して入れて計算するプログラムを製作するのではないでしょうか。
引き算や負の加算は補数計算で行う。
このあと、掛け算、割り算を追加して電卓を完成させるという課題のような気がします。

取り違えていたらorz
    • good
    • 0

★アドバイス


>NULL文字をチェックすればよいのか、
 ↑
 これは違う。
>それとも「isspece」の関数を使って空白文字を調べればよいか解りません。
 ↑
 『isspace』関数で空白文字の判定が出来ますので文字列の解釈位置を1つ進めれば良いです。
 あるいは空白文字だけをカットして別の文字列領域にコピーしてから解釈させるなどします。
 どちらの方法でも可能ですがソースコードを見ると最初に空白文字だけをカットして別の
 文字列領域にコピーしてから空白文字がない文字列を処理させた方が良さそうです。
 GetLine() 関数の次の行に空白文字をカットする処理を記述すれば良いでしょう。
・以上。
    • good
    • 0
この回答へのお礼

Oh-Orangeさん

mumu712mです。
的確なアドバイスありがとうございます。
このような場合は「isspace」関数で空白を見つけ「Trim」関数で削除する順序になるのでしょうか?
まだC言語を習い始めて1ヶ月弱で知識不足です。
出来ましたら、どのように記述するかコードを見せていただけると大変、助かります。
何卒、宜しくお願いします。

お礼日時:2007/12/25 18:29

普通は isspace ではないかなぁ? NUL 文字と比較する意味がわからん.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!