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

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

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

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

Eclipse

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

Q&A

解決済

2回答

3234閲覧

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

zazenbo

総合スコア8

C

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

Eclipse

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

0グッド

0クリップ

投稿2018/05/19 02:03

前提・実現したいこと

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

発生している問題

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

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

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

該当のソースコード

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

C

1#include <stdio.h> 2 3int main(void) 4{ 5 int n; 6 7 puts("!!!整数を入力してください!!!"); 8 fflush(stdout); 9 scanf("%d", &n); 10 11 return 0; 12} 13

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

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

  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 06:33

編集2018/05/19 06:37
raccy

総合スコア21733

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

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

zazenbo

2018/05/19 06:57

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

0

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

C

1#include <stdio.h> 2 3int main(void) 4{ 5 int n; 6 7 printf("!!!整数を入力してください!!!\n"); 8 scanf("%d", &n); 9 printf("入力された数字は%dです.",n); 10 return 0; 11}

ちなみに

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

C

1#include <stdio.h> 2#include <stdlib.h> 3 4#define BUFSIZE 256 5 6int main(void) 7{ 8 char buf[BUFSIZE]; 9 int n; 10 11 printf("!!!整数を入力してください!!!\n"); 12 fgets(buf,sizeof(buf),stdin); 13 n = atoi(buf); 14 printf("入力された数字は%dです.",n); 15 16 return 0; 17}

投稿2018/05/19 03:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

zazenbo

2018/05/19 06:33

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問