System.formatexception: इनपुट स्ट्रिंग सही प्रारूप में नहीं थी


यह कोड त्रुटि दिखा रहा है

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

सी#
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);
          
        }
    }
}

लेकिन अगर मैं नीचे दिए गए कोड पर सरल टिप्पणी करूं तो यह ठीक काम कर रहा है:

सी#
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);
          
        }
    }
}

कृपया मुझे कारण बताएं.
धन्यवाद

मैंने क्या प्रयास किया है:

int p1 = Convert.ToInt32(Console.ReadLine().Trim());
लेकिन यह भी वही त्रुटि दिखा रहा है।

समाधान 1

आप एक चरित्र इनपुट कर रहे हैं और इसे int के रूप में पढ़ रहे हैं। यही तो समस्या है। इसे सुधारो।

समाधान 2

यह कोड के साथ कोई समस्या नहीं है. समस्या उस इनपुट के साथ है जिसे आप कोड की इस पंक्ति को फीड करने का प्रयास कर रहे हैं। आप कंसोल पर जो कुछ भी टाइप कर रहे हैं उसे पूर्णांक में परिवर्तित नहीं किया जा सकता है।

हो सकता है कि आप इसके बजाय Int32.TryParse() पर गौर करना चाहें। पहले दस्तावेज़ में इसके बारे में पढ़ें।

समाधान 3

समाधान 1 और 2 के अलावा:

कक्षा का प्रयोग न करें Convert जबकि वास्तव में इसकी आवश्यकता नहीं है. यह “रूपांतरण” नहीं है; यह है पदच्छेद. बेहतर होगा कि उस विधि का उपयोग करें जो आपके मामले में ठीक यही करती है, int.Parseया, बेहतर, अपवाद न फेंकने वाली विधि, int.TryParse:

.

-एसए

समाधान 4

मैंने आपका कोड कॉपी किया और उसका परीक्षण किया।
भले ही मैं इनपुट करता हूं integer यह वही मूल्य दे रहा था format exception..
विचार करना समाधान 1,2,3 के संबंध में जानकारी हेतु पूर्णांक मानों को पार्स करना

समस्या यह है कि, आप उपयोग कर रहे हैं Console.Read() तरीका

उद्धरण:

जब आप इनपुट अक्षर टाइप करते हैं तो रीड विधि इसकी वापसी को रोक देती है; जब आप Enter कुंजी दबाते हैं तो यह समाप्त हो जाता है। Enter दबाने से आपके इनपुट में एक प्लेटफ़ॉर्म-निर्भर लाइन समाप्ति अनुक्रम जुड़ जाता है (उदाहरण के लिए, विंडोज़ एक कैरिएज रिटर्न-लाइनफ़ीड अनुक्रम जोड़ता है)। रीड विधि के बाद के कॉल आपके इनपुट को एक समय में एक वर्ण पुनः प्राप्त करते हैं। अंतिम वर्ण पुनर्प्राप्त होने के बाद, रीड उसकी वापसी को फिर से अवरुद्ध कर देता है और चक्र दोहराता है।

संदर्भ देना कंसोल.रीड विधि (सिस्टम)[^]

इस नीचे दिए गए कोड को डीबग करने का प्रयास करें

सी#
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);

        }
    }

Console.Read() उस पंक्ति में अंतिम चार मान निर्दिष्ट किया जाएगा।
और तत्काल Console.ReadLine() उपयोगकर्ता इनपुट से अनदेखा कर दिया जाएगा और यह वह मान निर्दिष्ट करेगा जो स्क्रीन पर पहले से ही टाइप किया गया है।
उदाहरण के लिए:
यदि आप टाइप करते हैं “a1” फिर p1str मूल्य धारण करेगा”1“पहले चार को अनदेखा करके
यदि आप टाइप करते हैं “123” फिर p1str मूल्य धारण करेगा”23“जिसे बिना किसी अपवाद के पूर्णांक में पार्स किया जा सकता है।
यदि आप टाइप करते हैं “1[pressed enter key]” तब p1str मान “” (खाली या वापसी कुंजी) धारण करेगा जिसके परिणामस्वरूप होगा format exception..

मुझे आशा है कि आप समझ गए होंगे, ब्रेकप्वाइंट और डिबगर लागू करें, देखें कि यह कैसे काम करता है..

समाधान 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をコピーしました