ページ 11

入力を複写するプログラムについて

Posted: 2015年10月09日(金) 12:52
by masechin
初めまして。

今二つ以上の空白を一つに置き換えながら、入力を出力に複写するプログラムを作っています。

getcharでつくっているのですがgetcharで二文字以上も一緒に書き込めないために空白を二つも
読み込めないことに困っています。どのようにすれば解決できるでしょうか?
今のCの知識は大学で習っていましたが、苦手意識が強く苦手なためご教授お願いします。
今書き途中のプログラムを載せておきます

コード:

#include<stdio.h>

main()
{
	int c,spc;

	spc = 0;


	while((c = getchar()) !=EOF)		//getcharは一字ずつしか入力出来ない
		if(c ==' ')			//もし空白が二つ以上なら...
			++spc;
		if(c !=' ')     //空白がなくなったら0に戻る?
			spc = 0;
	else if putchar(c);
}
	

Re: 入力を複写するプログラムについて

Posted: 2015年10月09日(金) 14:02
by みけCAT
masechin さんが書きました:getcharでつくっているのですがgetcharで二文字以上も一緒に書き込めないために空白を二つも
読み込めないことに困っています。
getcharでは一文字も書き込めないと思います。
書き込むにはputcharなどを使ってください。
masechin さんが書きました:どのようにすれば解決できるでしょうか?
今連続している空白が1個以下なら、かつ1個以下の場合に限り出力するようにすればいいでしょう。

コード:

#include<stdio.h>

int main(void)
{
	int c,spc;

	spc = 0;

	while((c = getchar()) !=EOF)
	{
		/* 今連続している空白の数を数える(空白でなければ0) */
		if(c == ' ')
			++spc;
		else
			spc = 0;
		/* 空白がある程度連続していたらカンストさせる(オーバーフロー防止) */
		if(spc > 16)
			spc = 16;
		/* 連続している空白が1個以下なら、かつその場合に限り出力する */
		if(spc <= 1)
			putchar(c);
    }

    return 0;
}

Re: 入力を複写するプログラムについて

Posted: 2015年10月09日(金) 14:32
by masechin
ありがとうございます。else if(spc <=1)にすることで無事にプログラムを完成させることが
出来ました。カンストさせるという発想は考えていなかったのでとても勉強になりました。

Re: 入力を複写するプログラムについて

Posted: 2015年10月09日(金) 14:42
by かずま
別解

コード:

#include <stdio.h>

int main(void)
{
    int c, prev_c = 0;

    while (c = getchar(), c != EOF)
        if (c != ' ' || prev_c != ' ')
            putchar(c), prev_c = c;
    return 0;
}