プロが教える店舗&オフィスのセキュリティ対策術

2進数を入力し10進数に変換するプログラムを作成したのですが、うまく動作しないので質問させてください。
コマンドライン引数を使って実行したいのですが2進数も入力出来ず困っています。作成したコードの何処に問題があるのかも解らずにいます。
宜しくお願いします。
作成環境は「Windows XP」「Visual Studio .net 2003」

<作成したコードです>
***********************************************************
// binary.cpp : コンソール アプリケーションのエントリ ポイントを定義します。

#include "stdafx.h"
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
if( argc < 8 ){
printf("2進数を入力してください。\n");
exit(1);
}

//空白文字のチェック//
int i=0,n=0;
char decimal[ 128 ], binary[ 128 ];
for( i=0; i<argc; i++ ){
if( binary[ i ] != ' ' ){
decimal[ n ] = binary[ i ];
n++;
}
}
//'\0'を代入(文字列の終端)//
decimal[ n ]='\0';

//「0」と「1」のループ//
for( i=0; i<argc; i++ ){
if(( decimal[ n ] == '0' ) || ( decimal[ n ] == '1' )){
}else{
printf("エラー\n 「0」と「1」以外の文字が入力されております\n");
}
}
//桁数のループ//
int m = 0;
for( i=0; i<'\0'; i++ ){
m = m +1 ;
}
//桁数の判断///
if( m == 8 ){
}else{
printf("エラー\n2進数(0,1)を8桁、入力して下さい。\n");
}
//add・初期化//
int add = 0;
//decimal[0]~decimal[7]の判断//
if( decimal[ 0 ] == '1' ){
add += 128;
}
if( decimal[ 1 ] == '1' ){
add += 64;
}
if( decimal[ 2 ] == '1' ){
add += 32;
}
if( decimal[ 3 ] == '1' ){
add += 16;
}
if( decimal[ 4 ] == '1' ){
add += 8;
}
if( decimal[ 5 ] == '1' ){
add += 4;
}
if( decimal[ 6 ] == '1' ){
add += 2;
}
if( decimal[ 7 ] == '1' ){
add += 1;
}
//2進数を10進数に変換した値の出力//
printf("2進数を10進数に変換した値は %d \n",add);

return 0;
}

A 回答 (3件)

#include <iostream>


#include <string>
#include <bitset>
#include <cstdlib>
int main(int argc, char* argv[])
{
 if (argc < 2)
  return EXIT_FAILURE;
 try
 {
  std::bitset<128> binary(std::string(argv[1]));
  std::cout << binary.to_ulong() << std::endl;
 }
 catch (...)
 {
  return EXIT_FAILURE;
 }
 return EXIT_SUCESS;
}

では駄目なのでしょうか?
    • good
    • 0
この回答へのお礼

参考にさせていただきます。
ご返答いただきまして、ありがとうございました。

お礼日時:2008/01/22 00:59

 


 こういうの?
http://oshiete1.goo.ne.jp/qa3690048.html
 
    • good
    • 0

>for( i=0; i<argc; i++ ){


なぜ argc (引数の数)を終了条件にしているのかよくわかりません。

>if( binary[ i ] != ' ' ){
>decimal[ n ] = binary[ i ];
何の前触れもなく binary[i] 登場。びっくり。

>for( i=0; i<argc; i++ ){
なぜ argc (引数の数)を終了条件にしているのかよくわかりません。

>for( i=0; i<'\0'; i++ ){
なぜ '\0' (ヌル文字)を終了条件にしているのかサッパリわかりません。


まずはコマンドライン引数が argv[] にどのように格納されているかから復習して下さい。
    • good
    • 0

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