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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
masechin
記事: 7
登録日時: 10年前

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

#1

投稿記事 by masechin » 9年前

初めまして。

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

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

masechin
記事: 7
登録日時: 10年前

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

#3

投稿記事 by masechin » 9年前

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

かずま

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

#4

投稿記事 by かずま » 9年前

別解

コード:

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

閉鎖

“C言語何でも質問掲示板” へ戻る