- 締切済み
ungetcとgetcharを使って
C言語の授業でレポートが出て困っています。ungetcとgetcharを必ず使って abbaabab ^z abは3回、baは2回 というコンソール画面を表示させるプログラムをつくってください。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- AsarKingChang
- ベストアンサー率46% (3467/7474)
No4さん、盛大に、吹いたぞ(w) 日本酒呑んでるときこれ見るのは、きつい(w) ナイス回答!
それでは、こういうのはどうでしょう。 #include <stdio.h> #define COUNT(ab, ba) int d = getchar(); return fp[c+1][d+1](d, ab, ba) static int (*fp[257][257])(int,int,int); int _ab(int c, int ab, int ba) { COUNT(ab+1, ba); } /* abを数える */ int _ba(int c, int ab, int ba) { COUNT(ab, ba+1); } /* baを数える */ int _no(int c, int ab, int ba) { COUNT(ab, ba); } /* 他は数えない */ int _eof(int c, int ab, int ba) { return printf("abは%d回、baは%d回\n", ab, ba); } int main(void) { for (int i = 0; i <= 256; i++) for (int j = 0; j <= 256; j++) fp[i][j] = (!i) ? _eof : _no; fp['a'+1]['b'+1] = _ab; fp['b'+1]['a'+1] = _ba; int c = getchar(); ungetc(c, stdin); COUNT(0, 0); }
- honor
- ベストアンサー率35% (25/71)
#include <stdio.h> #include <stdlib.h> int main(){ int ab=0,ba=0; char c; while( (c = getchar()) != EOF ) (c=='a'||c=='b')&&(c-'a'?(c=getchar())=='a'&&ba++:(c=getchar())=='b'&&ab++,1)&&ungetc(c,stdin); printf("abは%d回,baは%d回\n",ab,ba); return 0; } 多分こんな感じでできるんじゃないかと思います。
- Wr5
- ベストアンサー率53% (2173/4061)
あなたを勝ち組にして差し上げましょう。 インデントは全角スペースですので、その辺はよろしく処理してください。 #include <stdio.h> int main(int argc, char* argv[]) { int ch; ch = getchar(); ungetc(ch, stdin); puts("abbaabab"); puts("^z"); puts("abは3回、baは2回"); return 0; }
- kmee
- ベストアンサー率55% (1857/3366)
ここは質問の場所です。 作ってください、だと依頼です。 まずは、あなたができない理由は (1)どうやったら [abは3回、baは2回]みたいに数えられるかがわからない (2) (1)はわかるけど、それを ungetcとgetchar を使ってプログラムにする方法がわかならい (3) やるつもりがない のどちらでしょう? (1)なら、まずは、あなたが手を使って数えるやりかたを、箇条書きにでもしてみましょう。 それをC言語に変換します
- AsarKingChang
- ベストアンサー率46% (3467/7474)
ungetcですか(w) 以下にも授業だな~ ほぼ使わない命令だと思うが。 ネットで、 その2個の関数のプロトタイプと使用例をみればOKですよ。
- Tacosan
- ベストアンサー率23% (3656/15482)
その「レポート」とやらで要求されているのは あなたがプログラムを作ること ではありませんかね.