2016-03-08 33 views
8

ユーザの入力から与えられた等級を計算するプログラムを考え出しています。また、ユーザー入力の上限または下限を設定しようとしています(0 < =または> = 100)。しかし、私はそれが私にこのエラーを与え続けて小数を使用する場合、「演算子 『<は』タイプのオペランドに適用することができない 『小数』と 『ダブル』」、小数点の場合オペレータ '<'は、 'decimal'と 'double'タイプのオペランドには適用できません。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Grade_Program 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string First; 
      string Last; 
      First = "Cristiano"; 
      Last = " Ronaldo"; 
      Console.Write("Please enter student name <First Last>: "); 
      Console.WriteLine(First + Last); 

      Console.WriteLine(" "); 

                Console.WriteLine("*************NOTE**********************************************"); 
     Console.WriteLine("*** Be sure to include decimal point for scores.   ***"); 
     Console.WriteLine("***  !!!All score should range from 0.00 to 100.00 !! ***"); 
     Console.WriteLine("***               ***"); 
     Console.WriteLine("*** For example : 80.50          ***"); 
     Console.WriteLine("***************************************************************"); 

     Console.WriteLine(" "); 

     decimal Exam_1; 
     decimal Exam_2; 
     decimal Exam_3; 
     decimal Assignment_1; 
     decimal Assignment_2; 

     Console.Write("Please enter score for Exam 1 <Example: 100.0>: "); 
     Exam_1 = Convert.ToDecimal(Console.ReadLine()); 

     if (Exam_1 < 0.0 | Exam_1 > 100.0) 
      Console.Write("Exam score cannot be less than 0. or greater than      100.0. Please re-enter the score for Exam 1 <Example: 95.0>:"); 
      Exam_1 = Convert.ToDecimal(Console.ReadLine()); 

     Console.Write("Please enter score for Exam 2 <Example: 0.0>: "); 
     Exam_2 = Convert.ToDecimal(Console.ReadLine()); 
+1

エラーを投げるのコードの正確なラインを投稿してください。 –

+1

'0M <= myDecimal || 100M> = myDecimal'(ref:https://msdn.microsoft.com/en-us/library/364x0z75.aspx) – souldzin

+0

ほとんどの場合、このエラーはキャストの問題が原因です。コードを貼り付けると、正解を正確に与えることができます。 – Sasa1234

答えて

13

あなたのコードには少なくともの4つのの問題があります。

まず、述べたように、あなたはそれが受け入れられた比較のためdecimalであるC#コンパイラ伝えるためにM接尾辞を使用する必要があります。代わりに|||を使用し、

if (Exam_1 < 0.0M | Exam_1 > 100.0M) 

しかし第二を、あなたのためにOR操作をしたい、Bitwise-OR

if (Exam_1 < 0.0M || Exam_1 > 100.0M) //change | to || 

そして第三あなたがこれを知っているために、私は非常に重要だと思う:(あなたの試験マークがフォーマット99.123456789にすることができない限り、 - かなり不可能である)あなたは、試験のマークのためのdecimalデータ型を必要としません。

decimalは、通常16桁以上の精度まで、非常に高精度が必要な数値(銀行ではmoneyの計算など)に使用されます。あなたの試験のマークがそれを必要としないならば、を使用しないでください。decimalを使用すると、それはoverkillです。 Examsにはdoubleまたはintまたはfloatを使用してください。あなたはおそらく正しい軌道にいるでしょう。

第四、あなたのエラー処理については、これはそれを行うための間違った方法です。

if (Exam_1 < 0.0 | Exam_1 > 100.0) 
    Console.Write("Exam score cannot be less than 0. or greater than      100.0. Please re-enter the score for Exam 1 <Example: 95.0>:"); 
    Exam_1 = Convert.ToDecimal(Console.ReadLine()); 

による二つの理由に:

  1. あなたExam_1は、ブロックの外(「そこにISNされますt {}ブラケット)
  2. 使用する必要がありますが、ifを使用してくださいwhile

これはそれを行うための正しい方法である:

C#言語で
double Exam_1 = -1; //I use double to simplify 

Console.Write("Please enter score for Exam 1 <Example: 100.0>: "); 
Exam_1 = Convert.ToDouble(Console.ReadLine()); 

while (Exam_1 < 0.0 || Exam_1 > 100.0) { //see the curly bracket 
    Console.Write("Exam score cannot be less than 0. or greater than      100.0. Please re-enter the score for Exam 1 <Example: 95.0>:"); 
    Exam_1 = Convert.ToDouble(Console.ReadLine()); 
} //see the end curly bracket 

、インデントはPythonのような言語とは異なり、スコープを意味するものではありません。

+0

ループは動作しますか? – Abdulhamid

+0

@Abdulhamidいいえ...あなたのエラー処理(あなたの言葉では "ループ"ですが、実際にはそうではありません)は別の問題であるようです...残念ながら.. – Ian

+0

私はそうしないので、それを将来実行しますか? – Abdulhamid

1

あなたに「M」の接尾辞を追加する必要がありますコンピュータに伝える値は10進数です。さもなければコンピュータはそれを二重とみなします。

yourDecimal < 98.56M;

1

すでに他の人が指摘しているとおりです。より大きいまたはより小さい演算子を使用してdecimalタイプを比較するには、別のdecimalタイプと比較する必要があります。リテラル数字を小数点として宣言するには、Mまたはmの接尾辞が必要です。参考のためdecimalタイプのMSDNがあります。

if (Exam_1 < 0.0m || Exam_1 > 100.0m) 

Here's a .NET fiddle with the fix.

関連する問題