- ベストアンサー
C言語 単語を取得するプログラム
- ファイルからアルファベットをスペース等で区切って取得するプログラムを作成
- デバグがうまくいかないため、どの部分がおかしいか教えてほしい
- テキストから単語を取得するプログラムの作成方法を教えてください
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
デバッグというくらいですから、普通にデバッガーを使ってステップ実行すればすぐわかると思います。 この行にブレイクポイントを入れてステップ実行すれば良いでしょう。 > if(c!=' ' && c!=',' && c!='.'){ そして、ループを回るごとにnの値がどう変化するかを観察しましょう。 あと、文字列の終端を示す記号は\nではないですよね。 他の点については既にkmeeさんが指摘しているとおりです。 他には文字列が長いとバッファが溢れそうとか、isspace使えばいいのにとか色々思うところはありますが。
その他の回答 (3)
- Wr5
- ベストアンサー率53% (2173/4061)
>fp=fopen("test.txt","r"); >if((fp = fopen("test.txt","r"))==NULL){ ファイルの多重オープンが許可されている環境なんでしょうか? 2回目のオープンが失敗する可能性と、1回目のオープンが閉じていない状態は問題ありませんか? ファイルから取得した後、なにをやりたい…んでしょうかね?? 他は既に指摘されているようですので……。
- kmee
- ベストアンサー率55% (1857/3366)
まずは、「どうおかしいか?」を分析しましょう。 それがわからなければ、プログラムを修正することはできません。 > char c; fgetcのマニュアルを良くよみましょう。 戻り値は何になっていますか? 原稿用紙等のマス目のある紙を用意してください。 そのマスに鉛筆で適当な文字を書いていってください。 これが、dataの初期状態です。 > data[0]='\0'; 最初のマスを'\0'に書き換えます。 > n=strlen(data); 先頭から'\0' までのマスを数えます。これがstrlenの動作です。 一番最初なので0です。 > data[n]=c; さっき求めたnのマスを書き換えます。先頭ですね。 > data[n+1]='\n'; その次のマスを'\n' に書き換えます。 > n=strlen(data); さて、次にstrlenを実行したら、このnは何になるでしょうか? 「先頭から'\0' までのマスを数える」strlenです。\0はどこにあるでしょうか?
- bin-chan
- ベストアンサー率33% (1403/4213)
> デバグがうまくいきません。 どう、デバッグがうまくいかないの? 例示のデータで実行したらどうなったの?