電子書籍の厳選無料作品が豊富!

簡単な質問で恐縮ですが、現在WindowsでVC++2010Expressでコードを書いています。

そこで、以下の様な入力文字数を返すコードを書いているのですが、コマンドプロンプト上でCtrl+Z(Ctrl+Dも試した)を押してもストップしてくれません。(コマンドプロンプト上に「^Z(^D)」と表示されるだけです。

どなたか教えて頂けませんでしょうか?


#include <stdio.h>
int main()
{
int strText;
int counter=0;

while( (strText=getchar() ) != EOF){
++counter;
}
putchar(counter);

return 0;
}

A 回答 (14件中11~14件)

>ところで、(仕様にもよるでしょうが)何も言われていない場合であれば通常キャラクタのカウントにはスペースやタブ、改行は含めるのでしょうか?



コード次第…でしょう。
なお、掲示されているコードは「入力した文字のカウント」ではなく「getchar()がEOF以外の値を返却した回数のカウント」となっているハズです。
# gets()やscanf()などとは違い、「BackSpace」や「Delete」も1文字としてカウントするでしょうし。

仕様と言っているのは「getchar()が戻ってくる際の仕様」かと。
たいていgetc(stdin)のマクロになっていると思われますので、そちらの仕様次第…と。

この回答への補足

>「BackSpace」や「Delete」も1文字としてカウントするでしょうし。

私もそれが気になって「BackSpace」や「Delete」も試してみましたが、カウントされずに表示通りの文字数が返って来ました。
この辺の動作が不明なのですが、「getchar()がEOF以外の値を返却した回数のカウントとなっているハズ」ではないのでしょうか?

補足日時:2014/03/10 10:20
    • good
    • 0

>ところで、(仕様にもよるでしょうが)何も言われていない場合であれば通常キャラクタのカウントにはスペースやタブ、改行は含めるのでしょうか?



スペースとタブは数え、改行は数えませんね。
タブはデータ上は1文字ですが、見た目には4文字や8文字になるので
4や8とカウントすることもあります。

要は画面や印刷で数えたものと一致させることですね。
    • good
    • 0
この回答へのお礼

ありがとうございます。改行は数えないように修正しました。

お礼日時:2014/03/10 10:16

訂正


誤)Windows+vc2013で動かしてみました。
正)Windows+vs2013で動かしてみました。
    • good
    • 0

Windows+vc2013で動かしてみました。



Ctrl+Zをおすと^Zと表示されて、その後enterを押すと終了しました。

ちなみに
putchar(counter);  ではなくて、
printf("%d\n",counter);  にしましょう。

それに(仕様によりますが)enterも数えています。

この回答への補足

VS2013とVS2010でこの辺のことが違うということはないと思うのですが。

あれから、特に何もコードをいじること無しに動くようになりました。Linkが見つからないとエラーが出ていたので、そこのフォルダから一度開き直したからかもしれません。
printfは先にそれで試してならなかったのでputcharを書いておりました。正常にコンパイルされてからはputcharではエラーが出るので書き換えました。

ところで、(仕様にもよるでしょうが)何も言われていない場合であれば通常キャラクタのカウントにはスペースやタブ、改行は含めるのでしょうか?

補足日時:2014/03/10 08:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!