• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:数字変換について)

数字変換について

このQ&Aのポイント
  • 数字変換についての質問
  • 入力した文字列が意図しない数値として出力される現象について
  • 解決策を教えてほしい

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

>ccscのcコンパイラ 同じものが手元にありませんので、手元のgcc Ver.3.4.5を使って、 下記のコードを書いてみました。 すると、 W?I999 という入力に対しては W?I999 999 W?I400 という入力に対しては W?I400 400 という風に、十進数として扱いたい部分を正しい値で認識できました。 コンパイラの違いなのか、文字コード体系の違いなのか、 それとも別のことが原因なのか、残念ながらわかりませんでした。 #include <stdio.h> int main(void) { unsigned char a, COM_RW[7], IDall[3]; unsigned long ID2 = 0; int i, j; for (a = 0; a < 7; a++) { COM_RW[a] = (unsigned char) getchar(); printf("%c", COM_RW[a]); } switch (COM_RW[0]) { case 'W' : //WRITE Command if (COM_RW[2] == 'I') { COM_RW[6] = '\0'; if (isxdigit(COM_RW[3])) { for (i = 0, j = 3; j < 6; j++, i++) { IDall[i] = COM_RW[j]; } if (!isdigit(IDall[2])) { ID2 = (IDall[0] - '0') * 10; ID2 += IDall[1] - '0'; } else { ID2 = (IDall[0] - '0') * 100; ID2 += (IDall[1] - '0') * 10; ID2 += IDall[2] - '0'; } printf("%ld\n", ID2); } } break; default: break; } return 0; }

noname#85552
質問者

お礼

コードを試して頂いていたんですね!! ほぼこのままで動く、ということがわかっただけでもありがたいです。 コンパイラの違いなのかなんなのか… もう一度関数(getc()等)を見直してみます。前はこれで動いたんですけどね… わざわざありがとうございます!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

>[x,x,x,9,9,9]と入力→[xxx231]と出力 提示されたコード断片には出力箇所がありません。 よって、 >__以下略。 で省略された箇所に問題があるかもしれません。 どうにも判断がつきませんので、出力箇所も見せていただけますか? ところで、 >________c=getc(); このgetc()は標準関数ですか? 標準関数ならば、引数でファイルポインタを指定する必要があるのですけれど…。

noname#85552
質問者

補足

すみません、出力も消していたようです… printf("%ld",ID2); で出力しています。あ、もしかして符号の有無が関係するのでしょうか… getc()については、組み込み?とかいうやつです。標準とは違うのでしょうか? ccscのcコンパイラを使っています。

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

COM_RW[] には、どこで値をセットしているのでしょうか?

noname#85552
質問者

補足

あ…すみません、最初のforの中でセットしてます。 for(a=0;a<7;a++){ c=getc(); COM_RW[a]=c; printf("%c",c); } 消してたみたいです;

すると、全ての回答が全文表示されます。

関連するQ&A