![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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;
}
No.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;
}
では駄目なのでしょうか?
No.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[] にどのように格納されているかから復習して下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
空ENTERの判別
-
snprintfが使用できない。
-
MingwでC++のソースがコンパイ...
-
コンパイルできません
-
なぜ、C++の標準ヘッダをインク...
-
VC++で文字列から任意の文字を...
-
switch文のエラーについて
-
#include "fstream.h"
-
ICPCの過去問
-
C言語からgnuplot呼び出し
-
C++でUNDOを実装しようとしてい...
-
マイナスからプラスへ転じた時...
-
信頼区間の1.96や1.65ってどこ...
-
「Aに対するBの割合」と「Aに対...
-
AtCoderABC135の問題Cについて
-
Aの値からBの値を除するとは??
-
C言語での引数の省略方法
-
プログラミング初心者です。 Py...
-
doubleの変数にintとintの割り...
-
「指定されたキャストは有効で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
std::wstringのメモリリークに...
-
空ENTERの判別
-
指定した文字を削除したい
-
構文エラーが出ているのですが...
-
#include "fstream.h"
-
なぜ、C++の標準ヘッダをインク...
-
C言語のポインターで詰まっている
-
C++での <iostream.h>と<iostre...
-
VHDLのsignedとunsignedの違いは?
-
snprintfが使用できない。
-
CStringとString
-
C++で、テキストファイルを一行...
-
【C++】ヘッダ内でstringを格納...
-
gccでコンパイル時のエラー
-
_CRT_SECURE_NO_DEPRECATE が効...
-
string型のフォーマット書式指...
-
JPEGやPNGが読めるLoadImage関数
おすすめ情報