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

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

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

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

Q&A

解決済

2回答

2166閲覧

新・明解 C言語 入門編 演習8-9を解きたいです。

Bulls

総合スコア4

C

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

0グッド

0クリップ

投稿2021/04/20 05:08

前提・実現したいこと

C言語勉強中です。
テキスト : 新・明解 C言語 入門編
演習8-9 : 標準入力に現れた行数をカウントするプログラムを作成せよ。

#include <stdio.h> int main(void) { int i, ch; int cnt[10] = {0}; do { printf("入力してください. : "); } while ((ch = getchar()) != EOF); { switch (ch) { case '0' : cnt[0]++; break; case '1' : cnt[1]++; break; case '2' : cnt[2]++; break; case '3' : cnt[3]++; break; case '4' : cnt[4]++; break; case '5' : cnt[5]++; break; case '6' : cnt[6]++; break; case '7' : cnt[7]++; break; case '8' : cnt[8]++; break; case '9' : cnt[9]++; break; } } puts("\n数字文字の出現回数"); for (i = 0; i < 10; i++) printf("'%d' %d\n", i, cnt[i]); return 0; } <結果> 1354687 15847987 146354135468 1354684532 1354684 13536569879645132 1323854687645132 6897542312086452 13584874512 1325878964512 963852741 01248563 ^Z 数学文字の出現回数 '0' 2 '1' 17 '2' 12 '3' 17 '4' 19 '5' 20 '6' 15 '7' 9 '8' 17 '9' 6

###(私の作成イメージ)

<結果> 1354687 15847987 146354135468 1354684532 1354684 13536569879645132 1323854687645132 6897542312086452 13584874512 1325878964512 963852741 01248563 ^Z 数学文字の出現回数 '0' 2 '1' 17 '2' 12 '3' 17 '4' 19 '5' 20 '6' 15 '7' 9 '8' 17 '9' 6 入力行数は12行です。

自作コード

C

1#include <stdio.h> 2int main(void) 3{ 4 int i, ch; 5 int line_count = 0; 6 int cnt[10] = {0}; 7 8 do 9 { 10 printf("入力してください. : "); 11 } 12 while (scanf(ch = getchar()) != EOF && ++line_count); 13 { 14 switch (ch) 15 { 16 case '0' : cnt[0]++; break; 17 case '1' : cnt[1]++; break; 18 case '2' : cnt[2]++; break; 19 case '3' : cnt[3]++; break; 20 case '4' : cnt[4]++; break; 21 case '5' : cnt[5]++; break; 22 case '6' : cnt[6]++; break; 23 case '7' : cnt[7]++; break; 24 case '8' : cnt[8]++; break; 25 case '9' : cnt[9]++; break; 26 } 27 } 28 29 puts("\n数字文字の出現回数"); 30 for (i = 0; i < 10; i++) 31 printf("'%d' %d\n", i, cnt[i]); 32 33 printf("\n入力行数は%d行です。", line_count); 34 35 return 0; 36}

発生している問題・エラーメッセージ

enshu8-9.c:13:15: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion] while (scanf(ch = getchar()) != EOF && ++line_count); ^~~~~~~~~~~~~~ C:\BCC101\bin..\include\windows\crtl\stdio.h:301:49: note: passing argument to parameter '__format' here int _RTLENTRY _EXPFUNC scanf(const char * __format, ...);

お願い

C言語を勉強し始めて3か月近く経ちましたが、まだ壁にぶつかっています。
いきなり答えを書かずに解説、ヒントを書いてほしいです。
よろしくお願いいたします。

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

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

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

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

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

K_3578

2021/04/20 05:10

まぁ3ヶ月ならぶつかってもおかしくないですね、 んで、エラーメッセージを読んで貴方はどう思ったのでしょうか
dodox86

2021/04/20 10:09

> 演習8-9 : 標準入力に現れた行数をカウントするプログラムを作成せよ。 問題文自体は「行数」ってなっていますが。コードは数文字('0'~'9')の出現回数を求めていますが、どちらが正しいのでしょう。
guest

回答2

0

ベストアンサー

enshu8-9.c:13:15: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'

incompatible : 互換性のない
integer to pointer : int から ポインタ への
conversion : 変換
passing 'int' to parameter of type 'const char *' : 'int' を 引数の型 'const char *' に引き渡す

中学校英語です。
「scanfに引き渡すべき(第一)引数の型は const char* でなくてはならんのに、int を渡してますよ」
と言うてます。

何のためにscanf()を呼んだのですか? 一文字入力はgetchar()がやってくれてますよ?

投稿2021/04/20 07:12

episteme

総合スコア16612

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

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

0

いきなり答えを書かずに解説、ヒントを書いてほしいです。

関数scanf()の引数って何だろう? 何かルールがあるよね.
で,

scanf(ch = getchar())

という記述は,それを満たしているのだろうか?
まぁ満たしてないからコンパイラが「そんなん,滅茶苦茶ですやん!」って嘆いているわけですな.

ルール無用の好き勝手なコードを書くのではなく,使う関数の仕様に即したコードを書く必要があります.

投稿2021/04/20 05:36

編集2021/04/20 05:38
fana

総合スコア11954

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問