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

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

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

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

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

1527閲覧

設定した実引数が反映されません

karin10

総合スコア34

C

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

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/08/14 03:05

編集2021/08/14 05:26

下記コード(Fixed)に修正したところ正常に出力させるようにはできたのですが、なぜ下記コード(Error)では正常に出力されないのか分からず質問させて頂きました。

関数Print_Color(String color)で出力させる文字(色について)を設定しており、関数main()でPrint_Color(String color)を呼び出して実引数(BLUE)を代入しています。
しかし、確認したところmain()内で代入した実引数が、Print_Color(String color)で反映されておらず。REDが出力されてしまいます。

【Error】

C

1String RED; 2String BLUE; 3String GREEN; 4 5void Color(String color); 6 7void main() 8{ 9 Color(BLUE); 10} 11 12void Color(String color) 13{ 14 if(color == RED) 15 { 16 printf("RED"); 17 } 18 else if(color == BLUE) 19 { 20 printf("BLUE"); 21 } 22 else if(color == GREEN) 23 { 24 printf("GREEN"); 25 } 26} 27 28//REDが出力されます

【Fixed】

C

1void Color(String color); 2 3void main() 4{ 5 Color("BLUE"); 6} 7 8void Color(String color) 9{ 10 if(color == "RED") 11 { 12 printf("RED"); 13 } 14 else if(color == "BLUE") 15 { 16 printf("BLUE"); 17 } 18 else if(color == "GREEN") 19 { 20 printf("GREEN"); 21 } 22} 23 24// BLUEが出力されます

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

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

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

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

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

itagagaki

2021/08/14 03:20

Stringは何ですか?typedefした型ならその定義を示してください。
dodox86

2021/08/14 03:45

C言語でもC++でもJavaでもProcessing(≒Java)でも無さそうですが、一体何のプログラミング言語をお使いなのでしょうか。ソースコードのマークダウン記法でソースコードを提示する時は ```プログラミング言語の名前 コード... ``` のようにします。"Error"とか"Fixed"とかを入れるところではありません。 String RED; String BLUE; String GREEN; はたぶん、グローバル変数かフィールド扱いになっているので、値がnullとかになってしまい、BLUEもREDも値自体が同じになり、if (RED == BLUE)が真になるのではないかと。
karin10

2021/08/14 05:25

※Stringについての記載をせず申し訳ありませんでした。 Stringについて定義したのは自分ではなく、定義内容を確認したのですがclass String{省略}で定義されており、クラス内のコードの意味が理解できず勝手に省略してしまいました。申し訳ありません。 クラス内のコードが150行ほどありますので重要そうなところを抜粋して記載させていた頂きます。 検討違いでしたらすみません。 typedef void (String::*StringIfHelperType)() const; void StringIfHelper() const {}
jimbe

2021/08/14 05:36

C に"クラス"は無いと思います。 C++ ではないでしょうか。
karin10

2021/08/14 05:45 編集

今回の質問は、購入したロボット作成の学習キットで作成中に生じたことなのですが、マニュアルにはC言語と記載があります. すでに定義されている内容はC++で定義されているのかもしれません。。
episteme

2021/08/14 05:47 編集

マニュアルが嘘ついてる。コンパイラは何使ってます?
jimbe

2021/08/14 05:46

> ロボット作成の学習キット 商品名をお聞きしてもよろしいでしょうか?
dodox86

2021/08/14 05:53

ご提示のURLの説明を見ると > Arduino【C言語初級者向け】 とあるので、Arduino部分を使っていませんか? ArduinoにはStringクラスがあります。(ベースはC++です)まぁまぁ、C言語の知識で開発を進められる、という程度のことだと思います。
karin10

2021/08/14 05:55

コンパイラはgccを用いています
karin10

2021/08/14 06:08 編集

自分はエミュレータも用いてC言語【上級者向け】のコースですすめています。 すでに定義されているところはC++も用いられているという感じなんですね!
dodox86

2021/08/14 06:13 編集

C言語【上級者向け】に関する説明では > 「C言語開発には、別途オンチップデバッギングエミュレータ(ルネサスエレクトロニクス社製 E2 エミュレータLite)が必要です。 とあり、別途 https://icar.kernel-se.co.jp/download/ からダウンロードできる「C言語(e2 studio)開発環境」や 「C言語(e2 studio)入門編・サンプルプログラム・演習課題」の関数リファレンス - e2 studioを見るとベースはArduinoのソフトの開発方法と同等に見えます。setup()があり、loop()があります。 C++です。C++だと敷居が高そうに思われるのでC言語とマニュアルに書いているのかもしれませんが、そうだとするとかえって混乱を呼んでいますね。
karin10

2021/08/14 06:20

細かいところまで確認して頂きありがとうございます。。 そうだったんですね。関数loop内のコードを勝手に関数mainに置き換えて記載してしまっていました。 勉強不足な点が多く、今回の質問で皆様に混乱を招いてしまい申し訳ありませんでした。
jimbe

2021/08/14 06:25

ロボット車の操作のプログラミングから「実際の仕事でプログラミング」に至るという謳い文句が、結構な大風呂敷に思います ^^;
karin10

2021/08/14 06:35

そうですね。。。 LEDやモータを制御するための関数まで用意されていたので、「実際の仕事でプログラミング」どころか、C言語やハードの勉強もあまり進みませんでした。こんな質問しておいてですが。
jimbe

2021/08/14 06:52 編集

一応 BA 終了ということにされましたが、今後のご質問があれば、iCar やエミュレータ、開発環境(Arduino?, e2 studio?) 等の情報も含めたうえで、コードは改変せずにご提示頂くのが宜しいかと思います。 それにしても「ロボット プログラミング」で検索したら結構出てるモンですね~。
karin10

2021/08/14 07:08

ありがとうございます。 開発環境などについても記載してコードもそのまま記載するようにします。 結構多いですよね!
guest

回答2

0

ベストアンサー

質問するときは、コードを省略しないでください。
String が何かが分からないと回答ができません。

C

1#include <stdio.h> 2 3typedef char *String;

これを質問のコードの先頭に追加した場合について説明します。

Errorのコードでは、RED、BLUE、GREEN の 3つのポインタ変数が
すべてグローバルなので、NULL に初期化されています。
Color(BLUE); の呼出しで、変数BLUE の値が NULL なので、
Color関数の引数 color に NULL が渡されます。
最初の if文で、変数RED の値が NULL なので、引数color の値と一致します。

Fiexedのコードでは、Color("BLUE"); の呼出しで、
Color関数の引数 color に文字列 "BLUE" の先頭アドレスが渡されます。
今使っているコンパイラが同じ文字列を 1つにまとめるようになっているので、
else if(color == "BLUE") の文字列 "BLUE" の先頭アドレスが
引数color の値と一致します。

同じ内容の文字列を 1つにまとめず別々の文字列とするコンパイラの場合、
一致しません。

投稿2021/08/14 04:04

編集2021/08/14 04:45
kazuma-s

総合スコア8224

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

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

karin10

2021/08/14 05:35 編集

Stringについて申し訳ありませんでした。 Stirngの定義は自分ではなく、内容が理解できず勝手に省略してしまいました。 Stringについてclass String{省略}で記載されているのですが、中身のコードが150行ほどでありますので一部記載させて頂きます。的外れな内容でしたら申し訳ありません。 typedef void (String::*StringIfHelperType)() const; void StringIfHelper() const {}
kazuma-s

2021/08/14 05:58 編集

C に class はありません。C++ の間違いでしょう。質問を編集して、 class String の中のコンストラクタ String() の定義とメンバ変数の宣言を見せてください。 ヘッダファイルも全部見せてください。(#include の行)
karin10

2021/08/14 06:06

購入した学習キットですでに定義されていた内容なのですが、ネットに乗せても問題ないでしょうか。。。
guest

0

ErrorのほうのREDにはなにがはいってるんでしょうか

なにか入れてる形跡ありませんが

投稿2021/08/14 04:03

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問