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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
#include "fstream.h"
-
setw
-
gccでコンパイル時のエラー
-
enumの値から定義名を文字列化...
-
構造体配列のvectorへの変換と...
-
wstringの内容を表示させたい
-
空ENTERの判別
-
VC++で文字列から任意の文字を...
-
#define中の#のエスケープ
-
string型の固定長文字列を配列...
-
#defineの使い方について
-
指定した文字を削除したい
-
C++でのmath.hやstdio.hの使用...
-
OpenCVでRAW画像(カラー)を開...
-
_tcscat がうまくいきません(V...
-
vc++の使い方について
-
CStringとString
-
修正箇所の指摘のお願い(文字列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
なぜ、C++の標準ヘッダをインク...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
【C++】ヘッダ内でstringを格納...
-
snprintfが使用できない。
-
enumの値から定義名を文字列化...
-
#include "fstream.h"
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
C++での <iostream.h>と<iostre...
-
VC++で文字列から任意の文字を...
-
#defineの使い方について
-
wstringの主力
-
vc++の使い方について
-
std::map の const 修飾について
-
string型のフォーマット書式指...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
おすすめ情報