こんばんは。いさごです。
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:行数カウントについて質問です。
まず、こういうときは最初から着々と疑問点を解決していくところからはじめましょう。
int argc, char **argv
と書いていらっしゃいますが、今回は引数が関係ないので省略しましょう。
余計なものが書いてあると混乱する元になりますので。
こういうスタンダードな形にしてやって、プログラムを作り始めましょう。
ではgetchar関数の仕様についてはいいでしょうか?
入力された文字列の最初の1つをとってきて返す関数です。
つまり関数を呼んで帰ってきた1文字が入力された1文字ですからその1文字を格納して出力してやればそれになります。
このプログラムをコンパイルして結果を確認してください。
1文字入力したり3文字入力したりしてください。
次にこれを実行してください。
getcharの仕組みがわかってきましたね。
そうです、入力を1文字ずつ取ってくる関数なわけです。
では、「0」が入力されたら処理を終了させるプログラムを書いてみます。
エンドオブファイルはリナックスならCtrl + D,ウィンドウズならCtrl+Zで入力できます。
0を入力すると終了します。
ここまで来れば後は簡単ですね。
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:行数カウントについて質問です。
丁寧にありがとうございました!
学校では説明無しにこれを使いなさいと言われることが多いので、
仕組みが理解できてとても助かりました。
ありがとうございます。
学校では説明無しにこれを使いなさいと言われることが多いので、
仕組みが理解できてとても助かりました。
ありがとうございます。
Re:行数カウントについて質問です。
理解していただけてよかったです。
プログラムの宿題って
「ん~わからんもんはわからん!」
と投げてしまいがちですけど,プログラムってどんなに複雑に見える物でも
「最初から着々と」やっていけば結構できるものなんです。
最初から長いコードを書いたり,書いた物を渡されたりすると混乱してしまいますが
わからない関数やその部分があれば一つずつそれを理解していくことで解決できると思います。
これからも頑張ってください☆
プログラムの宿題って
「ん~わからんもんはわからん!」
と投げてしまいがちですけど,プログラムってどんなに複雑に見える物でも
「最初から着々と」やっていけば結構できるものなんです。
最初から長いコードを書いたり,書いた物を渡されたりすると混乱してしまいますが
わからない関数やその部分があれば一つずつそれを理解していくことで解決できると思います。
これからも頑張ってください☆