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件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは
ソースを読ませていただきまして、一言。
問題を取り違えているような気がします。
電卓の製作はよく課題として登場してきますが、多くはn桁電卓製作です。
配列に1桁ずつ数値に直して入れて計算するプログラムを製作するのではないでしょうか。
引き算や負の加算は補数計算で行う。
このあと、掛け算、割り算を追加して電卓を完成させるという課題のような気がします。
取り違えていたらorz
No.2
- 回答日時:
★アドバイス
>NULL文字をチェックすればよいのか、
↑
これは違う。
>それとも「isspece」の関数を使って空白文字を調べればよいか解りません。
↑
『isspace』関数で空白文字の判定が出来ますので文字列の解釈位置を1つ進めれば良いです。
あるいは空白文字だけをカットして別の文字列領域にコピーしてから解釈させるなどします。
どちらの方法でも可能ですがソースコードを見ると最初に空白文字だけをカットして別の
文字列領域にコピーしてから空白文字がない文字列を処理させた方が良さそうです。
GetLine() 関数の次の行に空白文字をカットする処理を記述すれば良いでしょう。
・以上。
Oh-Orangeさん
mumu712mです。
的確なアドバイスありがとうございます。
このような場合は「isspace」関数で空白を見つけ「Trim」関数で削除する順序になるのでしょうか?
まだC言語を習い始めて1ヶ月弱で知識不足です。
出来ましたら、どのように記述するかコードを見せていただけると大変、助かります。
何卒、宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- C言語・C++・C# C++ と、 1 2022/11/07 23:45
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
配列を使って魔方陣
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
教えてください
-
scanf関数を用いての加減乗除%...
-
最大値と最小値を表示したいの...
-
1からnまでの和を求めるプログ...
-
C言語 数字以外を入力させない...
-
C言語についてですfor ifをつか...
-
計算結果がlong型以上になる場...
-
scanfが実行されません
-
階乗のプログラム!!
-
C言語のwhile文を使った素数判...
-
switch文をif文に変換
-
C言語で電卓を作成する。
-
while文を使った問題なのですが...
-
直角三角形を表示するプログラム
-
素因数分解のプログラムを作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
計算結果がlong型以上になる場...
-
プログラミングで二番目に大き...
-
scanf関数を用いての加減乗除%...
-
getcの改行判定
-
C言語で電卓を作成する。
-
配列を使って魔方陣
-
C言語で勉強中(max,min)の出し方
-
C言語階乗の総和を求める
-
VHDLで、case文とwhen文のどち...
-
C言語でのトランプシャッフルに...
-
プログラム
-
while文について、c言語...
-
OpenCVを用いて任意の時間で静...
-
scanfが実行されません
-
C言語 数字以外を入力させない...
-
C言語です
おすすめ情報