質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

3回答

4813閲覧

C言語で行の終わりを取得する方法

nakatsu6723

総合スコア38

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2018/02/22 08:43

1 2 + 3 4 - *
逆ポーランド記法が上記のように一行で与えられるのでそれを計算せよという問題で詰まったところです。(AizuOnlineJudgeの問題です。)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_A&lang=jphttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_A&lang=jp

式の途中で空白が入ってくるので行が終わりということを検知したいです。
調べたところ

while( scanf("%s", s) != EOF ) { // スタックの処理 } // ここで最終的な結果をprint

これで行の終わりでループを抜けられるのらしいですが、ターミナル上で実行してみてもループを抜けられてないみたいです。

AizuOnlineJudgeのサイトで提出するとAcceptされるのですが、手元のターミナルで「1 2 + 3 4 - *
」と入力しても結果が出てきてくれないです。
具体的にはgcc ファイル名をしてa.outが作られるので./a.outで実行して次の行で1 2 + 3 4 - *を入力して音沙汰ない状態です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

EOFは『ファイルの終わり』を意味します。(End of File)
改行を見つけてくれるわけではありません。

ターミナル上で実行する場合、明示的にEOFを送出する必要があります。
Linux系ならCtrl + D, Windowsなら Ctrl + Zを押し、エンターを押下すればよいはずです。

投稿2018/02/22 08:49

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakatsu6723

2018/02/26 03:05

仰る通りCtrl + Dの知識が欠けてました。 ありがとうございます!
guest

0

1行に式を一つずつ入力し、1行ごとに計算して出力 → 行末検出
1個の式を入力したら計算して出力してプログラム終了 → ファイル末検出

てなところでしょう。どっちがしたいのでしょうか?
前者なら'\n'と文字を比較すれば良いし、後者なら今のプログラムのままでキーボードからEOFを入力してやればOKのはず。

投稿2018/02/23 06:31

a_saitoh

総合スコア702

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakatsu6723

2018/02/26 03:04

後者の方でした、説明不足ですいません。 ターミナル上でEOFを認識するにはCtrl + Dが必要でした!
guest

0

すみません。正しくない回答をしてしまいましたので削除しました。

投稿2018/02/22 09:32

編集2018/02/22 10:13
GuielNo4

総合スコア88

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問