• 締切済み

ungetcとgetcharを使って

C言語の授業でレポートが出て困っています。ungetcとgetcharを必ず使って abbaabab ^z abは3回、baは2回 というコンソール画面を表示させるプログラムをつくってください。

みんなの回答

回答No.7

No4さん、盛大に、吹いたぞ(w) 日本酒呑んでるときこれ見るのは、きつい(w) ナイス回答!

noname#208507
noname#208507
回答No.6

それでは、こういうのはどうでしょう。 #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)
回答No.5

#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)
回答No.4

あなたを勝ち組にして差し上げましょう。 インデントは全角スペースですので、その辺はよろしく処理してください。 #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)
回答No.3

ここは質問の場所です。 作ってください、だと依頼です。 まずは、あなたができない理由は (1)どうやったら [abは3回、baは2回]みたいに数えられるかがわからない (2) (1)はわかるけど、それを ungetcとgetchar を使ってプログラムにする方法がわかならい (3) やるつもりがない のどちらでしょう? (1)なら、まずは、あなたが手を使って数えるやりかたを、箇条書きにでもしてみましょう。 それをC言語に変換します

回答No.2

ungetcですか(w) 以下にも授業だな~ ほぼ使わない命令だと思うが。 ネットで、 その2個の関数のプロトタイプと使用例をみればOKですよ。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

その「レポート」とやらで要求されているのは あなたがプログラムを作ること ではありませんかね.

関連するQ&A