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 $ */
コンパイラ&デバッガはなにを使っているのでしょうか?
コンパイラはgcc,デバッガはそれに付属しているgdbです。あちこち飛んでいるので、時間たつとわからなくなります。123abと打ち込んで取り出していくんですが、数字から文字に切り替わるところが、わかりません。デバッグをbreak mainで始めて、すぐに123abと打ち込みたいのですが,getchar()で待ちにならないので教えてもらえますか。すが
eclipseをインストールしました。list11_1.c,list11_2.cをビルド、実行の仕方を教えて頂けますか。単独のファイルは実行できたのですが、gccでするようにできますか
回答1件
あなたの回答
tips
プレビュー