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

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

ただいまの
回答率

90.47%

  • C

    3833questions

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

  • Eclipse

    1714questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

eclipseでデバッグ時,scanfで入力を受けつけません

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 386

zazenbo

score 2

 前提・実現したいこと

先日、Windows 7 および 10 のPCにeclipse oxygen(pleiades)を導入し、Cのプログラミングを行っています。現在、ビルドや実行の動作はなんら問題ありません。
しかし、デバッグ時に限り、見たことのない不具合がおきます。(「実行」をしたときはきちんと適切に動作するプログラムで起こります。プログラムの内容にかかわらず常に起こります。)

 発生している問題

  • scanf のある行でステップインをしたとき、通常ならコンソールから入力するのを待つはずが、コンピュータ側が勝手に何しらのデータを入力し、勝手に次の行へ進んでしまう。
  • printf による日本語のコンソール出力の一部が文字化けする。

(いずれも、「実行」時には正常に動きます。)

基本は、デバッガも特に問題なく動くのですが、この2点だけが解決しません。
どうすれば、scanfで入力を受け付けるようになり、文字化けをなくせるでしょうか。

 該当のソースコード

内容にかかわらず発生する不具合ですが、たとえば以下のようなプログラムでも発生します。

#include <stdio.h>

int main(void)
{
    int n;

    puts("!!!整数を入力してください!!!");
    fflush(stdout);
    scanf("%d", &n);

    return 0;
}


デバッグ後のコンソール:

!!!整数を�?�力してください!!!

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

私の環境でも現象を確認できました。文字化けについては下記対応で直ります。

  1. "eclipse.exe"があるフォルダーにある"eclipse.ini"をメモ帳などで開く。
  2. -Dfile.encoding=utf-8とだけ書いた行を追加し、保存する。
  3. 再度Eclipseを開く。

"utf-8"の部分はお使いの環境で変更してください。PleiadesのデフォルトはUTF-8のようです。

参考: Eclipse - Eclipseのコンソールの文字化け(25039)|teratail
参考: Eclipseのコンソール文字化け解決法。 - Qiita


変な値が入力される件ですが、私の環境でも"45-thread-select 1"という入力が勝手にされていることを確認できました。どうやら、デバッグを行うGDB関係のコマンドがそのまま標準入力に入ってしまうMinGW GDBと組み合わせたとき特有のバグのようです。

参考: 199219 – MinGW GDB Interactive Console

一応回避策が見つかりましたので、紹介します。

  1. メニュー [ウィンドウ] -> [設定] を開く。
  2. 左ツリー [C/C++] -> [デバッグ] -> [GDB] を開く。
  3. "Use external console for folider (open a new console window for input/output)" にチェックを入れる。
  4. 適用して閉じる。

これでデバッグ時は新しいコマンドプロンプトが表示されて、標準入力もそこで入力できるようになります。しかし、これには二つの欠点があります。

  • コマンドプロンプトの文字コードがWindows-31J(MS932)になるため、UTF-8としてプログラムを作成している場合は文字化けが起きます。MS932としてプログラムを作成し直す必要があります(ここら辺は説明や対応法が複雑なので、必要でない限り、日本語は使わない方が良いかもしれません)。
  • プログラムが終了するとコマンドプロンプトはそのまま閉じてしまいます。return 0;あたりにブレークポイントを付けて、終了しないようにすると良いでしょう。

状況に応じて使い分けいただければと思います。なお、この設定は通常の実行には影響を与えません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/19 15:57

    回答ありがとうございます。
    scanfの問題は、教えていただいた方法でいけました。コマンドプロンプトの文字化けは確かに起こりましたが、とりあえずは何とかなりそうです。
    大変助かりました、ありがとうございました。

    キャンセル

-1

こんにちは、私がCを動かしている環境では正常でしたが環境によっては
エラーが生じることもありうるので以下のようにしてみてください。

#include <stdio.h>

int main(void)
{
    int n;

    printf("!!!整数を入力してください!!!\n");
    scanf("%d", &n);
    printf("入力された数字は%dです.",n);
    return 0;
}

 ちなみに

.scanf関数は使い方はわかりやすく初心者の方はよく使われる関数ですが
色んな意味で大変危険な関数なのでおすすめできません。
入力した変数を扱いたい場合はfgets関数をおすすめします。

#include <stdio.h>
#include <stdlib.h>

#define BUFSIZE 256

int main(void)
{
    char buf[BUFSIZE];
    int n;

    printf("!!!整数を入力してください!!!\n");
    fgets(buf,sizeof(buf),stdin);
    n = atoi(buf);
    printf("入力された数字は%dです.",n);

    return 0;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/19 15:33

    ありがとうございます。
    書いていただいた二つのプログラムを試してみたのですが、scanf, fgets ともに依然、入力受け付けをされませんでした・・・。

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3833questions

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

  • Eclipse

    1714questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。