質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

322閲覧

文字を入力して各文字の出現回数をカウントしたい。

nagotta

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2022/01/20 16:17

編集2022/01/20 16:22

参考書でC言語の勉強をしている中で次のようなコードがでてきました。

C言語

1#include <stdio.h> 2 3int main(void){ 4 int ch,i; 5 int cnt[10]={0}; 6 while((ch == getchar()) != EOF){ 7 switch(ch){ 8 case '0': cnt[0]++; break; 9 case '1': cnt[1]++; break; 10 case '2': cnt[2]++; break; 11 case '3': cnt[3]++; break; 12 case '4': cnt[4]++; break; 13 case '5': cnt[5]++; break; 14 case '6': cnt[6]++; break; 15 case '7': cnt[7]++; break; 16 case '8': cnt[8]++; break; 17 case '9': cnt[9]++; break; 18 } 19 } 20 21 puts("数字文字の出現回数"); 22 for(i = 0; i< 10; i++){ 23 printf("'%d' : %d\n", i, cnt[i]); 24 } 25 return 0; 26}

これを実行し例えば,11112345678999,などと入力しenterキー、そしてctrl+z(環境によってはctrl+dらしい?)と入力したら、
数字文字の出現回数
'0' : 0
'1' : 4
'2' : 1
'3' : 1
'4' : 1
'5' : 1
'6' : 1
'7' : 1
'8' : 1
'9' : 3
と出力されるらしいのですが、そもそも入力時点でctrl+zを押すと、
^Z
[1]+ Stopped ./a.out
などと出力されて終了、また私はlinux(gcc)を使っているので(linuxはctrl+Dらしい)ctrl+Dを押してみたのですが何も出力されずにに入力画面が続行されています。
どうすれば上記のように実行できるでしょうか、教えてください。
linux(gcc)、Visual Studio Codeで実行しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/01/20 17:10

vscode 上で実行してそのような現象でしたら、linux 上で直接実行してみては如何でしょうか。
guest

回答2

0

ベストアンサー

(ch == getchar()) != EOF
は、
ch == getchar()
の結果(つまり0 or 1)をEOFと比較します。ほとんどの系でEOFは-1でしょうから、これが真になることはないかと思います。
(ついでに言えば、chには値が設定されていないので不定値のままです)

=と==とで間違えて痛い目を見た経験があるのかもしれませんが、逆にif文につづくカッコの中ではなにがなんでも==、とかいう決めつけをしていたりしませんか?

投稿2022/01/20 21:57

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ctrl+Z で Stopped ./a.out となったとすると、その環境では 入力終了は ctrl+d ですね。

unixポイOSでは それが普通です

投稿2022/01/21 02:24

winterboum

総合スコア23331

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問