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

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

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

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

Q&A

解決済

1回答

1077閲覧

list11_1a.c,list11_2a.cの分割コンパイルでデバッグでステップbyステップで様子が見たい

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2018/03/18 05:40

list11_1a.c,list11_2a.cのファイルを分割コンパイルして、実行しているんですが
正常に動作しているんですが、コードの実行過程をデバッグでステップを1つ1つ見たいのですが。123abを打ち込む画面が出ないので、教えてもらえますか。
それと123からabと変わるところがよくわかりません。よろしくお願いいたします。
7時間ぐらい格闘して、123の表示までは分かっているとおもいます。つぎのabの表示に
切り替わるところがこんがらがっています。

list11_1a.cのreturn (getchar());で123abと打ち込んで

コード //1文字入出力ライブラリ list11_1a.c #include <stdio.h> #define BUFSIZE 256 // バッファの大きさ char buffer[BUFSIZE]; // バッファ int buf_no = 0; // 現在の要素数 int front_ptr = 0; // 先頭要素カーソル int rear_ptr = 0; // 末尾要素カーソル //--- 1文字取り出す --- int getchr(void) { if (buf_no <= 0) // バッファが空であれば return (getchar()); // キーボードから読み込んで返す else { int temp; buf_no--; temp = buffer[front_ptr++]; if (front_ptr == BUFSIZE) front_ptr = 0; return (temp); } } //--- 1文字押し戻す --- int ungetchr(int ch) { if (buf_no >= BUFSIZE) // バッファが満杯であれば return (EOF); // これ以上押し戻せない else { buf_no++; buffer[rear_ptr++] = ch; if (rear_ptr == BUFSIZE) rear_ptr = 0; return (ch); } } // 1文字入出力ライブラリの利用例 list11_2a.c #include <ctype.h> #include <stdio.h> int getchr(void); int ungetchr(int ch); //--- 整数(数字の列)を読み込んで2倍の値を表示 --- int getnum(void) { int c = 0; int x = 0; int ch; while ((ch = getchr()) != EOF && isdigit(ch)) { x = x * 10 + ch - '0'; c++; } if (ch != EOF) ungetchr(ch); if (c) printf("%d\n", x * 2); return (ch); //--- 文字を読み込んでそのまま表示 --- int getnnum(void) { int ch; while ((ch = getchr()) != EOF && !isdigit(ch)) //getchar 関数は標準入力から 1 文字分文字を読み取ります putchar(ch); if (ch != EOF) ungetchr(ch); putchar('\n'); return (ch); } int main(void) { while (getnum() != EOF) if (getnnum() == EOF) break; return (0); } /* 実行結果 naka@naka ~/meikaicjs/chap11 $ gcc -c list11_1.c -Wall naka@naka ~/meikaicjs/chap11 $ gcc -c list11_2.c -Wall naka@naka ~/meikaicjs/chap11 $ gcc list11_1.o list11_2.o -Wall naka@naka ~/meikaicjs/chap11 $ gcc list11_1.o list11_2.o -o list11_1_2 -Wall naka@naka ~/meikaicjs/chap11 $ list11_1_2 123abc 246 abc ^Z naka@naka ~/meikaicjs/chap10 $ */

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

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

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

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

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

y_waiwai

2018/03/18 06:02

コンパイラ&デバッガはなにを使っているのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/18 06:38

コンパイラはgcc,デバッガはそれに付属しているgdbです。あちこち飛んでいるので、時間たつとわからなくなります。123abと打ち込んで取り出していくんですが、数字から文字に切り替わるところが、わかりません。デバッグをbreak mainで始めて、すぐに123abと打ち込みたいのですが,getchar()で待ちにならないので教えてもらえますか。すが
退会済みユーザー

退会済みユーザー

2018/03/19 00:24

eclipseをインストールしました。list11_1.c,list11_2.cをビルド、実行の仕方を教えて頂けますか。単独のファイルは実行できたのですが、gccでするようにできますか
guest

回答1

0

ベストアンサー

getchar を使って1文字づつ入力していろいろやってるのはわかりますが、
fgets を使って1行ごとの文字列を入力して、その文字列から数値変換してやっていくほうがいいかと思われますがどうでしょう。


で、C言語のデバッグですが、Ecripseを使えばどうでしょうか。
http://mergedoc.osdn.jp/
ここから、最新バージョンEclipse4.7 > C/C++版をダウンロード、インストールすれば、統合環境からコード入力、デバッグでワンステップづつ実行、確認できる環境が手に入ります。

投稿2018/03/18 07:03

y_waiwai

総合スコア87774

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

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

退会済みユーザー

退会済みユーザー

2018/03/18 10:15

ありがとうございます。今からお仕事です。明日やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問