System.formatException: chuỗi đầu vào không đúng định dạng

lập trình


Mã này đang hiển thị lỗi

C#
System.FormatException: Input string was not in a correct format

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.WriteLine("enter the character");
            int c = Console.Read();
            Console.WriteLine(c);

            Console.WriteLine("please enter first integer");
            int p1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("second");
            int p2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(p1 + p2);
          
        }
    }
}

Nhưng nếu tôi nhận xét đơn giản mã như bên dưới thì nó vẫn hoạt động tốt:

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.WriteLine("hello");
            //Console.WriteLine("enter the character");
            //int c = Console.Read();
            //Console.WriteLine(c);

            Console.WriteLine("please enter first integer");
            int p1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("second");
            int p2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(p1 + p2);
          
        }
    }
}

Xin vui lòng cho tôi biết lý do.
Cảm ơn

Những gì tôi đã thử:

int p1 = Convert.ToInt32(Console.ReadLine().Trim());
nhưng nó cũng hiển thị lỗi tương tự.

Giải pháp 1

Bạn đang nhập một ký tự và đọc nó dưới dạng int. Đó chính là vấn đề. Sửa lỗi nó.

Giải pháp 2

Đó không phải là vấn đề với mã. Vấn đề là ở đầu vào mà bạn đang cố gắng cung cấp dòng mã này. Bất cứ điều gì bạn đang gõ trên bảng điều khiển đều không thể được chuyển đổi thành số nguyên.

Thay vào đó, bạn có thể muốn xem xét Int32.TryParse(). Hãy đọc nó trong tài liệu trước.

Giải pháp 3

Ngoài Giải pháp 1 và 2:

Không sử dụng lớp Convert khi nó không thực sự cần thiết. Đây không phải là “chuyển đổi”; đây là phân tích cú pháp. Tốt hơn nên sử dụng phương pháp thực hiện chính xác điều đó, trong trường hợp của bạn, int.Parsehoặc tốt hơn là phương pháp không đưa ra ngoại lệ, int.TryParse:

.

-SA

Giải pháp 4

Tôi đã sao chép mã của bạn và kiểm tra nó.
mặc dù tôi đã nhập integer những giá trị nó mang lại giống nhau format exception..
Coi như Giải pháp 1,2,3 để biết thông tin liên quan đến Phân tích các giá trị số nguyên

vấn đề là bạn đang sử dụng Console.Read() phương pháp

Trích dẫn:

Phương thức Read chặn kết quả trả về của nó khi bạn nhập các ký tự đầu vào; nó kết thúc khi bạn nhấn phím Enter. Việc nhấn Enter sẽ thêm một chuỗi kết thúc dòng phụ thuộc vào nền tảng vào đầu vào của bạn (ví dụ: Windows sẽ thêm một chuỗi nguồn cấp dữ liệu trả về đầu dòng). Các lệnh gọi tiếp theo đến phương thức Đọc sẽ truy xuất từng ký tự đầu vào của bạn. Sau khi ký tự cuối cùng được lấy ra, Read sẽ chặn việc quay trở lại của nó và chu trình lặp lại.

Tham khảo Phương thức Console.Read (Hệ thống)[^]

hãy thử gỡ lỗi mã bên dưới

C#
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.WriteLine("enter the character");
            int c = Console.Read();
            Console.WriteLine(c);

            Console.WriteLine("please enter first integer");
            string p1str = Console.ReadLine(); // this will be ignored if you use Console.Read()
            int p1 = Convert.ToInt32(p1str);
            Console.WriteLine("second");
            string p2str = Console.ReadLine();
            int p2 = Convert.ToInt32(p2str);
            Console.WriteLine(p1 + p2);

        }
    }

Các Console.Read() sẽ gán giá trị char cuối cùng trong dòng đó.
và ngay lập tức Console.ReadLine() sẽ bị bỏ qua khỏi Đầu vào của người dùng và nó gán giá trị đã được nhập trên màn hình.
Ví dụ:
nếu bạn gõ “a1” thì p1str sẽ giữ giá trị “1” bằng cách bỏ qua ký tự đầu tiên
nếu bạn gõ “123” thì p1str sẽ giữ giá trị “23” có thể được phân tích cú pháp thành số nguyên mà không có ngoại lệ.
nếu bạn gõ “1[pressed enter key]” sau đó p1str sẽ giữ giá trị “” (khóa trống hoặc trả về) sẽ dẫn đến format exception..

Tôi hy vọng bạn hiểu, áp dụng điểm dừng và trình gỡ lỗi, chứng kiến ​​cách nó hoạt động..

Giải pháp 5

Console.WriteLine("hello");
            Console.WriteLine("enter the character");
            int c = Console.Read();
            Console.WriteLine(c);
            Console.ReadLine(); //this work fine
            Console.WriteLine("please enter first integer");
            int p1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("second");
            int p2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(p1 + p2);
        }

コメント

タイトルとURLをコピーしました