どうも、初めまして。
困ったです。
引き算がしたいのですが、
うまくいきません。
char a;
~処理~
a = a -'1';
キャラクターから、整数で引き算することは出来ない事はわかりました。
でも、とてもしたいのです。
なので、aを引き算をする時だけ一時的に整数に置き換える。
なんて出来ないでしょうか?
もっと良いやり方とかありましたら、教えてください。
かなり、初歩的な質問で申し訳ありません。
宜しくお願いします。
char型は1バイトの大きさを持っています。intは4バイトです。(処理系?によって異なったりするみたいですが)
違いは(多分)それだけです。
要するにchar型は文字専用の変数ではないということです。アスキーコード表を見てみると判ると思いますが、
すべの文字は整数で表現されてます。ですから、
char ch = '1';
printf(%d\n,ch);
ということも当然出来ます。ただ、1-'1'=0にはなりません。理由は、アスキーコード表を見てください。
>aを引き算をする時だけ一時的に整数に置き換える。
つまりこの解釈の仕方が間違ってます。
と、こんなんで大丈夫でしょうか?
結局何がしたいんでしょう?
a = a - 1;
ということ?もっと簡単に書けば
a--;
ですけど。
char a;
~処理~
int i;
i = atoi(a) - 1;
itoa(i,a,10);
こんな感じでいかがでしょうか?
aが何を表したいのでしょうか?
aが一桁の数値なのでしょうか?
それともaが文字の数値なのでしょうか?
それとも単純に文字なのでしょうか?
それがわからないと、正確に答えられません。
困ったです。
情報が足りなくてすみません。
一応解決はしたのですが、
もっと、いいやり方があったら教えてください。
**ソース開始**
CString a; //2が設定されています。
// aから-1を行いたい
char CharA;
CharstrSPage = atoi(a); // 演算の為CStringをCharに変換
CharA= CharA- 1;
szCPage.Format(%d, CharA);
**ソース終了**
atoi関数でCStringからCharに変換
引き算を行う
Format関数を使用しCStringに戻す。
こんな感じです。
CString szCPage = 2;
szCPage.Format(%d, atoi(szCPage) - 1);
ページみたいなので、一桁ではない可能性があるので
参考程度に例です。
CString a;
int dt;
dt = atoi(a);
if (dt >= 0) {
a.Format(%d,dt-1);
}
else {
// エラー等
}
ふむふむ、
format関数と、演算は一つの処理文でできるのですね。
TAKAさん、よくわかりましたね。
まさに、ページです。
皆さんありがとうございます。
>まさに、ページです。
ということなら、TAKAさんのソースのifの条件式は
>if (dt >= 0) {
if (dt >= 2) {
でしょうか。