Pengecualian sistem.format: string input tidak dalam format yang benar

pemrograman


Kode ini menunjukkan kesalahan

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);
          
        }
    }
}

Tetapi jika saya memberi komentar sederhana kode seperti di bawah ini berfungsi dengan baik:

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);
          
        }
    }
}

Tolong beritahu saya alasannya.
Terima kasih

Apa yang saya coba:

int p1 = Konversi.ToInt32(Konsol.ReadLine().Trim());
tetapi itu juga menunjukkan kesalahan yang sama.

Solusi 1

Anda memasukkan karakter dan membacanya sebagai int. Itulah masalahnya. Perbaiki itu.

Solusi 2

Itu bukan masalah dengan kodenya. Masalahnya adalah dengan masukan yang Anda coba berikan pada baris kode ini. Apa pun yang Anda ketik di konsol tidak dapat diubah menjadi bilangan bulat.

Anda mungkin ingin melihat Int32.TryParse() sebagai gantinya. Bacalah di dokumentasi terlebih dahulu.

Solusi 3

Selain Solusi 1 dan 2:

Jangan gunakan kelas Convert padahal sebenarnya tidak diperlukan. Ini bukanlah “konversi”; ini penguraian. Lebih baik gunakan metode yang melakukan hal itu, dalam kasus Anda, int.Parseatau, lebih baik lagi, metode tidak memunculkan pengecualian, int.TryParse:

.

-SA

Solusi 4

Saya menyalin kode Anda dan mengujinya.
padahal saya masukan integer nilai-nilai yang diberikannya sama format exception..
Mempertimbangkan Solusi 1,2,3 untuk informasi mengenai Mengurai nilai Integer

masalahnya adalah, Anda menggunakan Console.Read() metode

Mengutip:

Metode Read memblokir pengembaliannya saat Anda mengetikkan karakter input; itu berakhir ketika Anda menekan tombol Enter. Menekan Enter akan menambahkan urutan penghentian saluran yang bergantung pada platform ke input Anda (misalnya, Windows menambahkan urutan pengangkutan saluran kembali). Panggilan selanjutnya ke metode Baca mengambil masukan Anda satu per satu. Setelah karakter terakhir diambil, Read memblokir kembalinya karakter tersebut dan siklus berulang.

Merujuk Metode Konsol.Baca (Sistem)[^]

coba debug kode di bawah ini

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);

        }
    }

Itu Console.Read() akan menetapkan nilai char terakhir di baris itu.
dan segera Console.ReadLine() akan diabaikan dari Input Pengguna dan memberikan nilai yang sudah diketik di layar.
Misalnya:
jika kamu mengetik “a1” lalu p1str akan memegang nilai “1” dengan mengabaikan karakter pertama
jika kamu mengetik “123” lalu p1str akan memegang nilai “23” yang dapat diurai menjadi bilangan bulat tanpa kecuali.
jika kamu mengetik “1[pressed enter key]” Kemudian p1str akan memegang nilai “” (kunci kosong atau kembali) yang akan menghasilkan format exception..

Saya harap Anda mengerti, terapkan breakpoint dan debugger, saksikan cara kerjanya..

Solusi 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をコピーしました