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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

2回答

1211閲覧

文字列同士が等値なのに==がFalseになる

ToytonOfficial

総合スコア5

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/11/02 12:29

ヘディングのテキスト

Update関数の中の10行目で、入力されたテキスト(inputstring)と問題の答え(Answer)が等値(正しい答えを入力している)にもかかわらずFalse判定されてelseのほうが実行されてしまいます。なぜでしょう、、、?
なぜか最終問題だけは正しく判定されます。

C#

1using UnityEngine; 2using UnityEngine.UI; 3 4public class Quiz : MonoBehaviour 5{ 6 public GameObject Sen_Obj = null; 7 8 //入力を受け取る謎の型 9 public InputField inputfield; 10 //入力を受け取るstring 11 public string inputstring; 12 13 //クイズリストを宣言 14 public string[] QuizList; 15 //問題文を格納するstringを宣言 16 public string Question; 17 //答えを格納するstringを宣言 18 public string Answer; 19 20 //問題数を格納する問題数を宣言 21 public int NoQ; 22 //問題番号を宣言 23 public int QNo; 24 25 void Start() 26 { 27 //テキストファイルを格納するインスタンス 28 TextAsset QuizFile = new TextAsset(); 29 //クイズファイルに全体のテキストを格納 30 QuizFile = Resources.Load("Quiz", typeof(TextAsset)) as TextAsset; 31 //クイズファイルをstringに変換 32 string QuizText = QuizFile.text; 33 //テキストを改行で分割、クイズリストに格納 34 QuizList = QuizText.Split('\n'); 35 //問題数を格納 36 NoQ = QuizList.Length; 37 //問題番号を1にリセット 38 QNo = 1; 39 40 //コンポーネントを格納しているらしい 41 inputfield = inputfield.GetComponent<InputField>(); 42 43 //1問目を表示 44 GetQuiz(1); 45 } 46 47 void Update() 48 { 49 //エンターが押されたら正誤判定 50 if (Input.GetKeyDown(KeyCode.Return)) 51 { 52 //入力を取得 53 inputstring = inputfield.text; 54 55 if (inputstring != null) 56 { 57 //正解 58 if (inputstring == Answer) 59 { 60 Debug.Log("正解です!"); 61 } 62 //不正解 63 else 64 { 65 Debug.Log(不正解です); 66 } 67 68 //次の問題を表示 69 if (QNo < NoQ) 70 { 71 //問題番号を+1して次の問題を表示 72 QNo++; 73 GetQuiz(QNo); 74 //回答欄をクリア 75 inputfield.text = ""; 76 } 77 //最終問題の時は 78 else 79 { 80 Debug.Log("問題は終了しました"); 81 ChangeText("問題は以上です"); 82 } 83 } 84 } 85 } 86 87 //問題を表示する 88 void ChangeText(string Sentence) 89 { 90 Text Sen_Tex = Sen_Obj.GetComponent<Text>(); 91 Sen_Tex.text = Sentence; 92 } 93 94 //(引数)問目を表示 95 void GetQuiz(int QuizNum) 96 { 97 //問題*答えをstringに格納 98 string QAString = QuizList[QuizNum - 1]; 99 //*で分割 100 string[] QAList = QAString.Split('*'); 101 //QuestionとAnswerに代入 102 Question = QAList[0]; 103 Answer = QAList[1]; 104 //表示 105 ChangeText(Question); 106 } 107} 108

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

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

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

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

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

YAmaGNZ

2020/11/02 12:57

どういう方法で等しいのか確認しましたか? 比較する文字列に表示されても分かりにくい改行コードなど含まれていませんか?
yuuyu

2020/11/02 12:58

inputstringとAnswerを比較する前にログ出力してみて、一致するか確認しましたでしょうか? また、改行コードが\nであるか、Answer側の文字列に前後に空白がないかも一度確認してみてください。
ToytonOfficial

2020/11/02 23:36

trimで改行・空白を削除したらできました! どちらかに変な改行が入っていたのかもです ありがとうございましたm(_ _)m
guest

回答2

0

Trimを使用して改行・空白等を削除

投稿2020/11/03 01:53

編集2020/11/08 07:34
ToytonOfficial

総合スコア5

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

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

Zuishin

2020/11/03 01:57

多重投稿になっているので、削除依頼しておいてください。 おそらく \r\n が改行コードなのに \n で Split してるから \r が残っただけだと思いますが、可能なら原因を確かめて元の回答を編集し直してください。
guest

0

Trimを使用して改行・空白等を削除

投稿2020/11/02 23:37

ToytonOfficial

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問