行数カウントについて質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
いさご

行数カウントについて質問です。

#1

投稿記事 by いさご » 18年前

こんばんは。いさごです。
getcharとEOFを使って、入力した文字数と行数カウントのプログラムの宿題が出ました。

#include<stdio.h>
int main (int argc, char **argv){

int nc=0;

while (getchar() != EOF){
nc = nc + 1;
}
printf("%d文字です\n");

return(0);
}

ここまでは出来たのですが、どういう風に行数をカウントすればいいのかよくわかりません。
\nを数えればいいとヒントに書いてあるのですが・・・。
どなたか教えてください。お願いします。

管理人

Re:行数カウントについて質問です。

#2

投稿記事 by 管理人 » 18年前

まず、こういうときは最初から着々と疑問点を解決していくところからはじめましょう。

int argc, char **argv

と書いていらっしゃいますが、今回は引数が関係ないので省略しましょう。
余計なものが書いてあると混乱する元になりますので。
#include <stdio.h>
int main(){
	char ch;

         //ここに処理を書いていく

	return 0;
}

こういうスタンダードな形にしてやって、プログラムを作り始めましょう。

ではgetchar関数の仕様についてはいいでしょうか?
入力された文字列の最初の1つをとってきて返す関数です。
つまり関数を呼んで帰ってきた1文字が入力された1文字ですからその1文字を格納して出力してやればそれになります。
#include <stdio.h>
int main(){
	char ch;
	ch=getchar();

	printf("入力された文字は「%c」です\n",ch);

	return 0;
}

このプログラムをコンパイルして結果を確認してください。
1文字入力したり3文字入力したりしてください。

次にこれを実行してください。
#include <stdio.h>
int main(){
	char ch1,ch2;
	ch1=getchar();
	ch2=getchar();

	printf("入力された文字は「%c」と「%c」です\n",ch1,ch2);

	return 0;
}
これも1文字入力したり3文字入力したりしてください。

getcharの仕組みがわかってきましたね。
そうです、入力を1文字ずつ取ってくる関数なわけです。

では、「0」が入力されたら処理を終了させるプログラムを書いてみます。
#include <stdio.h>
int main(){
	char ch;

	while(1){
		ch=getchar();
		if(ch=='0')
			break;
	}

	return 0;
}
whileの条件の中にこれと同じ意味のことを書いてみます。
#include <stdio.h>
int main(){
	char ch;

	while((ch=getchar()) != '0'){

	}

	return 0;
}
おかきになったプログラムはこれがEOFつまりエンドオブファイルじゃない限りループとなったものです。
エンドオブファイルはリナックスならCtrl + D,ウィンドウズならCtrl+Zで入力できます。

#include <stdio.h>
int main(){
	int i=0;
	char ch;

	while((ch=getchar()) != '0'){
		if(ch=='1')
			i++;
	}

	printf("1は%d回入力された。\n",i);

	return 0;
}
それを拡張して、1が何回入力されたかを計測するプログラムがこれです。
0を入力すると終了します。

ここまで来れば後は簡単ですね。

いさご

Re:行数カウントについて質問です。

#3

投稿記事 by いさご » 18年前

丁寧にありがとうございました!
学校では説明無しにこれを使いなさいと言われることが多いので、
仕組みが理解できてとても助かりました。
ありがとうございます。

管理人

Re:行数カウントについて質問です。

#4

投稿記事 by 管理人 » 18年前

理解していただけてよかったです。
プログラムの宿題って
「ん~わからんもんはわからん!」
と投げてしまいがちですけど,プログラムってどんなに複雑に見える物でも
「最初から着々と」やっていけば結構できるものなんです。
最初から長いコードを書いたり,書いた物を渡されたりすると混乱してしまいますが
わからない関数やその部分があれば一つずつそれを理解していくことで解決できると思います。
これからも頑張ってください☆

閉鎖

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