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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
#include "fstream.h"
-
指定した文字を削除したい
-
VC++で文字列から任意の文字を...
-
switch文のエラーについて
-
CStdioFile での数値データの読...
-
構造体配列のvectorへの変換と...
-
C++で行列とベクトルの積を求める
-
C言語 ストリームについて。
-
#define中の#のエスケープ
-
C++のifstreamの使い方
-
なぜ、C++の標準ヘッダをインク...
-
atlbase.h と afxwin.hの同時定義
-
JPEGやPNGが読めるLoadImage関数
-
C++でShowCursorを使いたい。
-
マイナスからプラスへ転じた時...
-
Notepad++の関数リスト表示の変...
-
DWORDの実際の型は何でしょうか
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
std::map の const 修飾について
-
構文エラーが出ているのですが...
-
switch文のエラーについて
-
enumの値から定義名を文字列化...
-
VC++で文字列から任意の文字を...
-
構造体配列のvectorへの変換と...
-
wstringの主力
-
vectorのイテレータを大小比較...
-
std::wstringのメモリリークに...
-
opencvを使って画像比較
-
ヘッダーファイルがインクルー...
-
C++で2次元配列charをループしたい
-
【C++】ヘッダ内でstringを格納...
-
#define中の#のエスケープ
-
リモートデスクトップの接続元I...
-
string型のフォーマット書式指...
-
ファイル名のリスト取得について2
-
C++での <iostream.h>と<iostre...
-
gccでコンパイル時のエラー
-
C言語 ストリームについて。
おすすめ情報