ページ 1 / 1
C++ 表示が思う通りにいかない
Posted: 2021年10月07日(木) 09:42
by JJJuto
やりたいこと
筆算(足し算)をしたい
実行イメージ
入力>123
0
123
----------------
123
現在のコード
コード:
int main()
{
const int n = 50;
string input;
int num[n] = {0};
int value[n] ;
int sum[n];
cout << "入力>";
cin >> input;
cout << "\n";
for (int i = 0; i < input.length(); i++)
{
value[i] = input[input.length() - 1 - i] - '0';
sum[i] = num[i] + value[i];
}
for (int i = 0; i < input.length(); i++) {
cout << setw(50) << num[i] << "\n";
cout << setw(50) << input << "\n";
cout << "---------------------------------------------------\n";
cout << setw(50) << sum[input.length()-i-1] <<"\n\n";
}
}
各要素に格納する数字を、筆算がしやすいよう逆向きにしたあと、足して表示するというイメージです。
現在の実行結果
入力>123
0
123
------------
1
0
123
-------------
2
0
123
------------
3
各要素を表示しちゃう形になっていて、イメージとは少し違った感じになってます。
色々試したり、調べたのですが、同じような結果になったり、範囲外メモリにアクセスしちゃったりで上手くいかず詰まってます。
どう直せば、イメージ通りに行くか知りたいです。よろしくお願いします。
実行イメージのようにするには、
Re: C++ 表示が思う通りにいかない
Posted: 2021年10月07日(木) 20:19
by みけCAT
・それぞれの配列を出力しきるまで別の配列を出力しないようにする
・初期化していない部分の値を使わないようにする
などに注意して、出力がイメージ通りになるように直せばいいと思います。
コード:
#include <iostream>
#include <iomanip>
#include <string>
using std::cin;
using std::cout;
using std::setw;
using std::string;
// 表示を開始するべき桁 (0でない最初の桁、または(全部0の場合)最後の桁) の位置を返す
int getDisplayStartPoint(const int num[], int n)
{
for (int i = n - 1; i > 0; i--)
{
if (num[i] != 0)
{
return i;
}
}
return 0;
}
// 値が逆順に格納された配列を1行で出力する
void printArray(const int num[], int n, int width)
{
int start = getDisplayStartPoint(num, n);
for (int i = width - 1; i >= 0; i--)
{
if (i > start)
{
cout << ' ';
}
else
{
cout << num[i];
}
}
cout << '\n';
}
int main()
{
const int n = 50;
string input;
int num[n] = {0};
int value[n] ;
int sum[n];
cout << "入力>";
cin >> input;
cout << "\n";
for (int i = 0; static_cast<unsigned int>(i) < input.length(); i++)
{
value[i] = input[input.length() - 1 - i] - '0';
sum[i] = num[i] + value[i];
}
printArray(num, n, n);
cout << setw(n) << input << "\n";
cout << "---------------------------------------------------\n";
printArray(sum, input.length(), n);
}
実行結果
コード:
入力>
0
123
---------------------------------------------------
123
Re: C++ 表示が思う通りにいかない
Posted: 2021年10月07日(木) 20:45
by あたっしゅ
コード:
//
// https://dixq.net/forum/viewtopic.php?f=3&t=21295&sid=deb6dff8a55063bf6c3cb017628cda94
// C++ 表示が思う通りにいかない - ミクプラ(ja)
//
// for VS2021 Preview on Windows Insider Preview
//
#include <cstdlib>
#include <string>
#include <iostream>
#include <iomanip>
const int n = 4;
void output(int* v)
{
for (unsigned int i = 0; i < n; i++) {
std::cout << std::setw(1) << v[ n - i - 1 ];
}
}
int main() try
{
std::string input;
int num[n] = { 7, 8, 9, 0 }; // 987
//int value[n];
int sum[n];
while (true) {
std::cout << "3 桁までの数字を入力>";
std::cin >> input;
std::cout << std::endl;
std::cout << input.length() << std::endl;
if (input.length() < 4) {
break;
}
}
output( num );
for (unsigned int i = 0; i < n; i++)
{
sum[i] = 0;
}
for (unsigned int i = 0; i < n; i++)
{
int value;
if ( i < ( input.length() ) ) {
value = input[input.length() - i - 1 ] - '0';
}
else {
value = 0;
}
//std::cout << "value[" << i << "]"<< value << std::endl;
sum[i] += num[i] + value;
//std::cout << "sum[" << i << "]"<< sum[ i ] << std::endl;
if (sum[i] > 9) {
sum[ i ] -= 10;
sum[i + 1] += 1;
}
}
std::cout << std::endl;
std::cout << std::setw(n) << input << std::endl;
std::cout << "---------------------------------------------------\n";
output( sum );
std::cout << std::endl << std::endl;
return EXIT_SUCCESS;
}
catch (...)
{
std::cout << "例外発生" << std::endl;
return EXIT_FAILURE;
}
// end.
Re: C++ 表示が思う通りにいかない
Posted: 2021年10月10日(日) 10:01
by JJJuto
ありがとうございます!とても参考になりました!
Re: C++ 表示が思う通りにいかない
Posted: 2021年10月15日(金) 01:08
by box
筆算(足し算)をしたい
のに、
入力>123
1個だけの入力でホントにいいんですか?
足される数と足す数の2個の入力をしなくてホントにいいんですか?