プロが教える店舗&オフィスのセキュリティ対策術

同プログラムの内容で現在3個の質問をしておりますが!
 その質問を解決する上で4つ目の質問をさせていただきます。
 悪しからず・・・
 さて
以下のサイトのプログラムで 些細な疑問がございます。
https://oshiete.goo.ne.jp/qa/9062058.html
 で
 struct tanka_kosuu {
int tanka; 
int kosuu; 
int kingaku; /
以上の中にあるkosuuと
 struct tanka_kosuu kosuu[10];のkosuu[10]とは直接関係がありますか?
 馬鹿な質問ばかりで申し訳ございませんがよろしくお願いいたします。

質問者からの補足コメント

  • ご回答くださいまして誠にありがとうございました。
     covachan様のご回答から 
    あ!そうでした、まず試すことが先決でした。
     手が空き次第試そうと思います。
     お待ちくださいませ

      補足日時:2015/09/12 06:06
  • #include <stdio.h>
    struct tanka_kosuu {
    int tanka;
    int kosuu;
    int kingaku;
    };
    int main()
    {
    struct tanka_kosuu akb[10];
     以下省略
    kosuu[10];をakb[10];変えたところ
    以下の errorでてコンパイルできません!?
    example10.c
    example10.c(15) : error C2065: 'kosuu' : 定義されていない識別子です。
    example10.c(15) : error C2109: 配列または、ポインターでない変数に添字が使われま
    した。
    以上ですが、ご回答から
     #2さん 関係ありません。
     #1 さん 直接関係はありません。
    ですが・・errror内容からしまして、いかがものでしょうか?
     よろしくお願いいたします

      補足日時:2015/09/12 21:08

A 回答 (5件)

#No.1です。



>kosuu[10];をakb[10];変えたところ 以下の errorでてコンパイルできません!?
> example10.c(15) : error C2065: 'kosuu' : 定義されていない識別子です。


宣言している変数名を変更したら、その変数を利用している場所(エラーメッセージで15行目と書かれています)の変数名も変更する必要があると思いませんか?

下の例で、1行目も変数をaからbに変えたら、2行目,3行目のaも、bに変える必要があのはご理解いただけますよね?
01: int a;
02: a = 10;
03: printf("a=%d\n", a);
    • good
    • 0
この回答へのお礼

ご回答誠にありがとうございました^^。
 取り急ぎ結果をご報告いたします。
  ※初歩的なミスでした。
#include <stdio.h>
struct tanka_kosuu {
int tanka;
int kosuu;
int kingaku;
};
int main()
{
struct tanka_kosuu akb[10];
struct tanka_kosuu kari_nyuuryoku = {-1, 0, 0};
int nyuuryoku_kosuu = 0;
while(kari_nyuuryoku.tanka != 0){
scanf("%d %d", &kari_nyuuryoku.tanka,
&kari_nyuuryoku.kosuu);
akb[nyuuryoku_kosuu] = kari_nyuuryoku;
nyuuryoku_kosuu++;
}
return 0;
}

c:\msys\1.0\home\Administrator>CL example10.c
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.30723 for x86
Copyright (C) Microsoft Corporation. All rights reserved.

example10.c
Microsoft (R) Incremental Linker Version 12.00.30723.0
Copyright (C) Microsoft Corporation. All rights reserved.

/out:example10.exe
example10.obj

c:\msys\1.0\home\Administrator>



Administrator@ADMINISTRATOR ~
$ example10
100 3
0 0

Administrator@ADMINISTRATOR ~
$

お礼日時:2015/09/13 07:02

> example10.c(15) : error C2065: 'kosuu' : 定義されていない識別子です。



変数名であるkosuuを全部akbに変えないと駄目ですよ。メンバー名のkosuuまで変えないように。
    • good
    • 0

名前空間という物があって、同じ名前空間の中では違う物に同じ名前を付けられません(名前が同じ物なら表す物も同じ)。

名前空間が異なれば同じ名前であっても無関係な別物です。
Cの場合は、
1.gotoのラベル
2.構造体等のタグ struct foo { ・・・ } のfoo等
3.構造体等のメンバ名 struct foo { int x; float y;・・・} のx,y等
4.その他、変数名、関数名、型名など
の4つの名前空間があります。
質問文では、構造体のメンバ名と変数名なので、別物です。

別の会社なら、同じ社員番号でも赤の他人というようなもの。
    • good
    • 0

関係ありません。


同じ変数名を使用しているだけです。
struct tanka_kosuuをkousuuとして表現するなら
その中のint kosuuについてはkousuu.kousuuというような表現になります。
構造体のようなものになるとオブジェクト指向の概念を理解するとわかりやすくなります。
    • good
    • 0
この回答へのお礼

ご回答くださいませいて誠にありがとうございました。
 「いちばんやさしい オブジェクト指向の本」
 http://www.amazon.co.jp/%E3%81%84%E3%81%A1%E3%81 …
を8年ぐらい前に購入しまして、なぜかしりませんが2/3ぐらい読んで
 まだ最後まで読んでいません。
 今日から最後まで読みます。

お礼日時:2015/09/13 12:49

直接関係はありません。

偶々同じ名前を使用しているだけです。


※初学者の方はこういった点でも疑問に感じるのですね。いろいろな面で参考になります。

※蛇足かもしれませんが、
既にコンパイル環境をお持ちのはずですから、ご自身で確認されてみては如何でしょうか?
私が同じ疑問を持ったとしたら、どちらかの変数名を変えてコンパイルして、同一のデータを入力してみて、結果が変わるか確認すると思います。
    • good
    • 2

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