rubyで、「標準入力から一行ずつ読み込んでいって、空行・ファイル末尾・nilを読み込んだら終わりにする」というコードを書きたいのですが、意図したとおりに動きません。
以下のようなコードを書いてみたのですが、
ruby
1def input_line() 2 line=gets() 3 return line.chomp! 4end 5 6def input_lines() 7 lines=[] 8 while(line=input_line) 9 if line==nil or line=='\n'# or EOF 10 break 11 end 12 lines.push(line) 13 end 14end 15
まず、キーボードから入力した場合、空行を打っても終わらず、入力をやめるためにはCtrl+Zを打つ必要があります。
vs codeのターミナルで、ファイルから、
cat data.txt | .\ruby_small_utensils.rb
のように入力した場合、入力待ち状態で動作が止まります。
そもそも、input_lineメソッドで改行文字を取り除いているので、空行があればwhile(line=input_line)が偽になり、if以下はいらないはずだと最初は思ったのですが、うまくいかないのでif以下を付け加えたのですが、やはりうまくいきません。
更に、今はコメントアウトをしている「or EOF」を入れていると、uninitialized constantと言われてしまいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/13 12:07