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

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

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

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

Q&A

解決済

4回答

7738閲覧

getcharが上手く使えません

mirai_kobo

総合スコア11

C

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

0グッド

0クリップ

投稿2018/06/14 01:03

編集2018/06/14 01:51

前提・実現したいこと

プログラミング初心者です。
初めて質問させていただきます。
getchar関数を使って文字入力をしようと考えています。
この関数は一文字を入力できるとのことなので、配列に入れて繰り返し処理をしようと考えています。
forループを回した後に配列の中身が表示されるというものです。

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

処理結果は以下の通りです。

入力 -> 7
入力 -> 7
入力 -> 7
入力 -> 7
入力 -> 7
入力 -> 7
入力 -> 7
入力 -> 7
入力 -> 7
入力 -> 7
1469487808
終了
続行するには何かキーを押してください

該当のソースコード

C

1/* ヘッダファイル読み込み */ 2#include <stdio.h> 3 4/* main関数 */ 5int main() { 6 7 int i = 0; /*カウント用変数*/ 8 int a[11] = 0; /*入力された文字を格納するための変数*/ 9 10 for (i = 0; i < 10; i++) { /*iを10回回す*/ 11 printf("入力 -> "); /*入力を促すメッセージ*/ 12 a = getchar; /*getchar関数を使ってa配列に文字を格納*/ 13 while(getchar() != '\n'); /*Enterを入力するまでは回す*/ 14 } 15 16 printf("%d \n", a); 17 printf("終了 \n"); /*a配列を表示する*/ 18 19 return 0; /*正常終了*/ 20 21}

補足情報(FW/ツールのバージョンなど)

OS:Windows10
開発環境:Microsoft Visual Studio 2017 Community

よろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

C

1for (i = 0; i < 10; i++) { 2 printf("入力 -> "); 3 a = getchar; /* 指摘1、2 */ 4 while(getchar() != '\n'); /* 指摘3 */ 5}

指摘1)
C言語における関数の使用方法を間違えています。
上記のコードは、getchar関数のアドレスを変数aに代入していることになります。
関数を呼ぶときは、「()」が必要です。

指摘2)
配列の使用方法を間違えています。
a は配列を示していますが、そこにイコールで代入しても、漸次要素に追加されるわけではありません。
(少なくともC言語はそんな便利にはできていません。)
ここで、各要素に代入するには、「a[i]」と記載する必要があります。

指摘3)
指摘1でgetcharの実行結果が取得できていない一方、while文内のgetchar()は実行され、文字を取得していますが、どこにも代入されずに捨てられています。

投稿2018/06/14 01:23

kazto

総合スコア7196

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

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

mirai_kobo

2018/06/14 01:57

ありがとうございます。 解決しました。
guest

0

a = getchar; /*getchar関数を使ってa配列に文字を格納*/ while(getchar() != '\n'); /*Enterを入力するまでは回す*/

getchar関数というのは、キーボードからの文字を一文字取得する関数です
ですんで、その返り値はint型で、文字列は出てきません

ということで、このコードは動きません。
そもそもコンパイルエラーにならないのが不思議ですが

投稿2018/06/14 01:22

y_waiwai

総合スコア87774

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

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

mirai_kobo

2018/06/14 01:57

ありがとうございます。 解決しました。
guest

0

ベストアンサー

配列の基本的な使い方が出来ていないのかなと思いますので、その辺りのおさらいをしてみてください。
よくわからない箇所があれば聞いてください。

  • 配列の要素数は今回は10回分しか使っていませんので、a[10]で良いです。
  • 配列の中身をすべて0で初期化する場合は int a[10] = {0};と書けます(初期化時のみ)。
  • a = getcharは手元ではコンパイルエラーでしたのでa[i] = getchar(); にします。
  • 配列の出力はaだけでは先頭アドレスの値が出るだけですので、forで回しつつ各要素を出力してあげる必要があります。
  • getchar()は文字コードを返す関数ですので、printfでは%cを利用し、整数ではなく文字を出力します。

c

1#include <stdio.h> 2 3/* main関数 */ 4int main() { 5 6 int i; /*カウント用変数*/ 7 int a[10] = {0}; /*入力された文字を格納するための変数*/ 8 9 for (i = 0; i < 10; i++) { /*iを10回回す*/ 10 printf("入力 -> "); /*入力を促すメッセージ*/ 11 a[i] = getchar(); /*getchar関数を使ってa配列に文字を格納*/ 12 while(getchar() != '\n'); /*Enterを入力するまでは回す*/ 13 } 14 15 /*a配列を表示する*/ 16 for (i = 0; i < 10; i++) { 17 printf("%c \n", a[i]); 18 } 19 20 printf("終了 \n"); 21 return 0; /*正常終了*/ 22 23}

投稿2018/06/14 01:18

編集2018/06/14 01:23
takabosoft

総合スコア8356

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

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

mirai_kobo

2018/06/14 01:56

ありがとうございます。 解決しました。
guest

0

パッと見て気になった点。

a = getchar;

関数呼び出しになっていません。
getchar()と書きましょう。
またaは配列なのだからa[i]と書きましょう。

printf("%d \n", a);

aは配列なのでこの書き方ではアドレスしか出力されません。
ループで回すなどして出力しましょう。

c

1for(i = 0; i < 10; i++){ 2 printf("%d\n", a[i]); 3}

投稿2018/06/14 01:18

ttyp03

総合スコア16998

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

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

mirai_kobo

2018/06/14 01:55

ありがとうございます。 解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問