0

日付の間違った形式を受け入れてはならないコードを書きました。私は無効な選択を表示しますが、テキストファイルに誤った形式の日付を保存します。日付の形式が正しくない場合は、テキスト ファイルに保存しないでください。

using System;
using System.Collections;
using System.IO;
using System.Globalization;
class FunWithScheduling
{
    public void AddView()
    {
        FileStream s = new FileStream("Scheduler.txt",FileMode.Append,FileAccess.Write);
        StreamWriter w = new StreamWriter(s);
        Console.WriteLine("Enter the Name of the Person To Be Met:");
        string Name = Console.ReadLine();
        Console.WriteLine("Enter the Date Scheduled For the Meeting:");
        string Date = Console.ReadLine();
        DateTime date;

        if(!DateTime.TryParseExact(Date,"MM-dd-yyyy",new CultureInfo("en-US"),DateTimeStyles.None,out date))
        {
            Console.WriteLine("Invalid Choice");
        }
        Console.WriteLine("Enter the Time Scheduled For the Meeting:");
        string Time = Console.ReadLine();
        string line = Name + "                                "+ Date +"             " + Time;
        w.WriteLine(line);
        w.Flush();
        w.Close();
        s.Close();
    }

    static void Main()
    {
        FunWithScheduling a = new FunWithScheduling();
        a.AddView();
    }
} 

この変更されたプログラムは機能しません。While は終わりがなく、日付の正しい形式は受け入れられず、テキスト ファイルに保存されません。

文字列ビルダーの使用は許可されていません。


using System;
using System.Collections;
using System.IO;
using System.Globalization;
class FunWithScheduling
{
    public void AddView()
    {
        FileStream s = new FileStream("Scheduler.txt",FileMode.Append,FileAccess.Write);
        StreamWriter w = new StreamWriter(s);
        Console.WriteLine("Enter the Name of the Person To Be Met:");
        string Name = Console.ReadLine();
        Console.WriteLine("Enter the Date Scheduled For the Meeting:");
        string Date = Console.ReadLine();
        DateTime date;
        if(!DateTime.TryParseExact(Date,"MM-dd-yyyy",new CultureInfo("en-US"),DateTimeStyles.None,out date))
        {
            Console.WriteLine("Invalid date format!");
            while(!DateTime.TryParseExact(Date,"MM-dd-yyyy",new CultureInfo("en-US"),DateTimeStyles.None,out date))
            {
                Console.WriteLine("Invalid Date Entered, please format MM-dd-yyyy");
                Date = Console.ReadLine();
            }
        }
        Console.WriteLine("Enter the Time Scheduled For the Meeting:");
        string Time = Console.ReadLine();
        string line = Name + "                                "+ Date +"             " + Time;
        w.WriteLine(line);
        w.Flush();
        w.Close();
        s.Close();
    }

    static void Main()
    {
        FunWithScheduling a = new FunWithScheduling();
        a.AddView();
    }
}
4

5 に答える 5

3

追加する必要があります:

return;

後 :

Console.WriteLine("Invalid Choice");

また、状態チェックの後まで移動FileStreamして初期化することをお勧めします。StreamWriter

using System;
using System.Collections;
using System.IO;
using System.Globalization;
class FunWithScheduling
{
     public void AddView()
     {
        Console.WriteLine("Enter the Name of the Person To Be Met:");
        string Name = Console.ReadLine();
        Console.WriteLine("Enter the Date Scheduled For the Meeting:");
        string Date = Console.ReadLine();
        DateTime date;
        if(!DateTime.TryParseExact(Date,"MM-dd-yyyy",new CultureInfo("en-US"),DateTimeStyles.None,out date))
        {
               Console.WriteLine("Invalid Choice");
               return;
        }
        Console.WriteLine("Enter the Time Scheduled For the Meeting:");
        string Time = Console.ReadLine();
        string line = Name + "                                "+ Date +"             " + Time;
        FileStream s = new FileStream("Scheduler.txt",FileMode.Append,FileAccess.Write);
        StreamWriter w = new StreamWriter(s);
        w.WriteLine(line);
        w.Flush();
        w.Close();
        s.Close();
      }
      static void Main()
      {
        FunWithScheduling a = new FunWithScheduling();
        a.AddView();
      }
} 
于 2013-08-05T05:34:09.123 に答える
0

「日付」の問題を修正するには、「else」ステートメントを使用することをお勧めします。次に、代わりにString Builder+を使用して文字列を作成します。

ここであなたを助けようとしましたが、コンパイラで実行していません。

using System;
using System.Collections;
using System.IO;
using System.Globalization;
using System.Text;
class FunWithScheduling
{
     public void AddView()
     {
        FileStream s = new FileStream("Scheduler.txt",FileMode.Append,FileAccess.Write);
        StreamWriter w = new StreamWriter(s);
        var builder = new StringBuilder();
        Console.WriteLine("Enter the Name of the Person To Be Met:");
        string Name = Console.ReadLine();
        builder.Append(Name);
        Console.WriteLine("Enter the Date Scheduled For the Meeting:");
        string Date = Console.ReadLine();
        DateTime date;
        if(!DateTime.TryParseExact(Date,"MM-dd-yyyy",new CultureInfo("en-US"),DateTimeStyles.None,out date))
        {
               Console.WriteLine("Invalid Choice");
        } else {
            builder.Append(date.ToString("MMMM dd, yyyy"));
        }
        Console.WriteLine("Enter the Time Scheduled For the Meeting:");
        string Time = Console.ReadLine();
        builder.Append(Time);
        w.WriteLine(builder.ToString());
        w.Flush();
        w.Close();
        s.Close();
      }
      static void Main()
      {
        FunWithScheduling a = new FunWithScheduling();
        a.AddView();
      }
} 

ユーザーに正しい日付を強制的に入力させるために、これに似た while ステートメントを試すこともできます。

    while(!DateTime.TryParseExact(Date,"MM-dd-yyyy",new CultureInfo("en-US"),DateTimeStyles.None,out date)){
        Console.WriteLine("Invalid Date Entered, please format MM-dd-yyyy");
        Date = Console.ReadLine();
    }
于 2013-08-05T05:34:07.030 に答える
0

// 入力された日付が無効な場合は日付を空白にします; テキストファイルには保存されません。

if(!DateTime.TryParseExact(Date,"MM-dd-yyyy",
   new CultureInfo("en-US"),DateTimeStyles.None,out date))
{
    Console.WriteLine("Invalid Choice");
    Date = "";
}
于 2013-08-05T05:54:33.250 に答える
0

まず第一に、はい、文字列で単に + の代わりに StringBuilder を使用します。これを行うと、文字列は両方の文字列のメモリ使用量を乗算します。つまり、2 つの分離された文字列に対して 2 つのメモリ割り当てがあり、 con-catted 1、将来へのヒントにすぎません。

あなたがする必要があるのは、

StringBuilder sb = new StringBuilder();

sb.Append(Name);

if(!DateTime.TryParseExact(Date,"MM-dd-yyyy",new CultureInfo("en-US"),DateTimeStyles.None,out date))
    {
           Console.WriteLine("Invalid Choice");

    }
    else 
    {
        sb.Append(Date);
    }

そして、ファイル自体に書き込むときは、

w.WriteLine(sb.ToString());
于 2013-08-05T05:55:29.803 に答える
0

ユーザーが間違った日付を入力した場合、次の 2 つのオプションがあります。

  1. ストリームを閉じて、コードを終了します。
  2. 形式を指定して日付を再入力するようにユーザーに依頼します。

ストリームを閉じて終了するには、以下のコードを後に追加する必要があります。

Console.WriteLine("Invalid Choice");
w.Flush();
w.Close();
s.Close();
return;

ユーザーが正しい答えを指定するまで再入力を求めるには、次のコードを後に追加します。

Console.WriteLine("Invalid Choice");

while(!DateTime.TryParseExact(Date, "MM-dd-yyyy", new CultureInfo("en-US"), DateTimeStyles.None, out date))
{    
    Console.WriteLine("Invalid Date Entered, please format MM-dd-yyyy");
    Date = Console.ReadLine();
}    
于 2013-08-05T05:57:01.203 に答える