プロが教える店舗&オフィスのセキュリティ対策術

C言語の授業でレポートが出て困っています。ungetcとgetcharを必ず使って
abbaabab
^z
abは3回、baは2回

というコンソール画面を表示させるプログラムをつくってください。

A 回答 (7件)

その「レポート」とやらで要求されているのは


あなたがプログラムを作ること
ではありませんかね.
    • good
    • 0

ungetcですか(w)


以下にも授業だな~
ほぼ使わない命令だと思うが。

ネットで、
その2個の関数のプロトタイプと使用例をみればOKですよ。
    • good
    • 0

ここは質問の場所です。


作ってください、だと依頼です。

まずは、あなたができない理由は
(1)どうやったら [abは3回、baは2回]みたいに数えられるかがわからない
(2) (1)はわかるけど、それを ungetcとgetchar を使ってプログラムにする方法がわかならい
(3) やるつもりがない
のどちらでしょう?

(1)なら、まずは、あなたが手を使って数えるやりかたを、箇条書きにでもしてみましょう。
それをC言語に変換します
    • good
    • 1

あなたを勝ち組にして差し上げましょう。


インデントは全角スペースですので、その辺はよろしく処理してください。


#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;
}
    • good
    • 0

#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;
}

多分こんな感じでできるんじゃないかと思います。
    • good
    • 0

それでは、こういうのはどうでしょう。



#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);
}
    • good
    • 0

No4さん、盛大に、吹いたぞ(w)


日本酒呑んでるときこれ見るのは、きつい(w)
ナイス回答!
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!