みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

コマンドライン引数を使って2進数を10進数に変換させたい

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;
}

投稿日時 - 2008-01-21 00:40:44

QNo.3698732

すぐに回答ほしいです

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

#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;
}

では駄目なのでしょうか?

投稿日時 - 2008-01-21 06:33:48

お礼

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

投稿日時 - 2008-01-22 00:59:15

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2008-01-21 03:44:55

ANo.1

>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[] にどのように格納されているかから復習して下さい。

投稿日時 - 2008-01-21 01:16:31

あなたにオススメの質問