前提・実現したいこと
テキストファイルのデータを構造体に読み込み、
それをコンソールに表示するプログラムを書きたいです。
<テキストファイル>
Brad_Pitt 10110111 1001001
Tom_Cruise 10101010 1000011
Johnny_Depp 10110010 1000110
Will_Smith 10111100 1001110
Bruce_Willis 10111000 1001110
左から順にname,height,weightを表しています。
テキストファイルの2進数を10進数に変換する機能を
実装したところ以下のような意図しない結果が出力されました。
発生している問題・エラーメッセージ
The tallest is Will_Smith(0cm) 続行するには何かキーを押してください . . .
該当のソースコード
C++
1 2#include <iostream> 3#include <fstream> 4#include <array> 5#include <cstdio> 6 7 8#define MAXCNT 10 9 10struct shape_t { 11 char name[16]; 12 int height; 13 int weight; 14}; 15 16int main() 17{ 18 int decimal = 0; 19 int base = 1; 20 21 using namespace std; 22 23 array<shape_t, MAXCNT>stars; 24 25 ifstream stream("starsdata2.txt"); 26 if (!stream.is_open()) { 27 cout << "ファイルがオープンできません" << endl; 28 exit(1); 29 } 30 31 for (int i = 0; i < MAXCNT; i++) { 32 if (!(stream >> stars[i].name >> stars[i].height >> stars[i].weight)) 33 break; 34 } 35 36 for (int i = 0; i < MAXCNT; i++) { 37 while (stars[i].height > 0) { 38 decimal = decimal + (int((stars[i].height) )% 10) * base; 39 stars[i].height = stars[i].height / 10; 40 base = base * 2; 41 } 42 while (stars[i].weight > 0) { 43 decimal = decimal + (int((stars[i].weight) )% 10) * base; 44 stars[i].weight = stars[i].weight / 10; 45 base = base * 2; 46 } 47 } 48 int mt = 3; 49 50 cout << "The tallest is " << stars[mt].name << 51 "(" << stars[mt].height << "cm)" << endl; 52}
試したこと
変換の式に間違いがないか確認しました。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2019を使っています。
全く別の方法でも構いません。
始めて一週間なのでわからないことだらけですが、どうぞよろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/16 16:31
2019/06/17 13:51