##問題
問.(C++プログラミング)ファイルの内容を(リダイレクトで)読んで、各要素に1を足した値を出力するC++プログラムを作成せよ。
例)
入力 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 16 -1
出力 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 -1
入力ファイルの形式
テキストファイル形式(ASCII)で記述し、要素の区切りは空白文字とする。空白文字は、C++のiostreamの標準ではスペース・改行・タブである。
要素値は整数とする。
要素値が0または正の値である場合、通常のデータとして処理する。
要素値が-1の場合はファイルの最後として扱い、-1を出力して、プログラムを終了する
要素値が-1以外の負の値である場合は、エラーメッセージをcerrに出力し、プログラムを終了する。
問題をコピペするのは良くないのであれば、ここより上の部分は消します。
問題元(http://www.ced.is.utsunomiya-u.ac.jp/lecture/2014/prog/p3/kadai2/page1.php)
#include <iostream> using namespace std; int main() { int i, array[17]; cin >> array[0] >> array[1] >> array[2] >> array[3] >> array[4] >> array[5] >> array[6] >> array[7] >> array[8] >> array[9] >> array[10] >> array[11] >> array[12] >> array[13] >> array[14] >> array[15] >> array[16] >> array[17]; for (i=0; i<18; i++) { if(array[i] > 0) { array[i] = array[i] + 1; } else if(array[i] == -1) { array[i] = -1; break; } else { cerr << "Error: input is " << array[i] << endl; break; } } cout << array[0] << " " << array[1] << " " << array[2] << " " << array[3] << " " << array[4] << " " << array[5] << " " << array[6] << " " << array[7] << " " << array[8] << " " << array[9] << " " << array[10] << " " << array[11] << " " << array[12] << " " << array[13] << " " << array[14] << " " << array[15] << " " << array[16] << " " << array[17]; return 0; }
input:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 16 -1
return:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 17
どこが間違っているのでしょうか?またもっと美しい書き方がありますか?
--追記--
僕がわからないこと(問題としていること)は2つあります。
まずひとつ目は、
上のプログラムが、-1とreturnしなければならないところを17とreturnしたこと。
2つ目は、 cin << array[0] ...
と長くなっていたりすること。つまりきれいではないこと。1つ目の問題が解決したとして、もっときれいな書き方があるのか?という質問です。
二番目については、すでに回答をもらっており、現在、どこがどういう動きをしているのか理解(解読)しているところです。
皆さん回答していただきありがとうございます。皆さんの人生の貴重な、限りのある、お時間をもらって大変ありがたく思います。
回答5件
あなたの回答
tips
プレビュー