2012-06-28 23 views
6

ठीक है, मैं पहले यह कहकर शुरू करना चाहता हूं कि मैं छात्र नहीं हूं इसलिए इस प्रश्न का होमवर्क के साथ कुछ लेना देना नहीं है। मैं सी # सीखने की कोशिश कर रहा हूं क्योंकि जिस कंपनी के लिए मैं काम करना चाहता हूं वह इसका उपयोग करता है। मैंने सुना है कि सी # जावा के समान ही है इसलिए मैं अपनी जावा पुस्तक का उपयोग कर रहा हूं जिसमें सी # अभ्यास करने के लिए व्यायाम की समस्याएं हैं। यहां मेरा प्रश्न है, मैं एक साधारण प्रोग्राम बनाने की कोशिश कर रहा हूं कि उपयोगकर्ता 3 ग्रेड में प्रवेश करता है और यह इसे सरणी में संग्रहीत करता है और फिर दर्ज किए गए तीन ग्रेड प्रदर्शित करता है। समस्या यह है कि यह ग्रेड भंडार नहीं है। हालांकि यह की तरह अगर मैं 34, 44 में डाल कुछ यादृच्छिक संख्या को प्रदर्शित करता है, और 54 में यह 51. रिटर्न यहाँ मेरी कोड और धन्यवाद हर कोई है:सी # कंसोल उपयोगकर्ता इनपुट

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

namespace Practice1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] test = new int[4]; 

      int i = 1; 

      for (i = 1; i <= 3; i++) 
      { 
       Console.WriteLine("Please enter test " + i); 
       test[i] = Console.Read(); 
       Console.ReadLine(); 

      } 
      for (i = 1; i <=3; i++) 
      { 
       Console.WriteLine(test[i]); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 
+7

बस यह कहने के लिए कि सी # जावा की तरह नहीं है। आप खुद को एक असंतोष कर रहे हैं। एक अच्छी सी # किताब प्राप्त करें और इससे सीखें। – Oded

+7

हर किसी ने जो कहा वह सही है, लेकिन यह भी, आपका लूप गलत है (ठीक है, शायद। यह अजीब बात है)। आप पहले तत्व को छोड़ रहे हैं। इसके बजाए, उपयोग करें: 'के लिए (int i = 0; i

+0

आपका कॉलिंग console.read() फिर console.readline() .. console console.readkey() पर परीक्षण [ i] – Botonomous

उत्तर

1

Console.Read() एक चरित्र देता है। आप कंसोल से string पढ़ना चाहते हैं, इसे int में परिवर्तित करें, और उसके बाद उस मान को अपने सरणी में संग्रहीत करें।

8

आपकी समस्या यहाँ है:

test[i] = Console.Read(); 

यह आपका परीक्षण सरणी में एक चरित्र (जो एक पूर्णांक चरित्र कोड है) रहा है।

इसके बजाय करते

test[i] = int.Parse(Console.ReadLine()); 

संपादित करें: आपको विश्वास है कि उपयोगकर्ता एक parsable पूर्णांक टाइप करेगा नहीं कर रहे हैं, हो सकता है वे में टाइप करता हूँ "छह", उदाहरण के लिए आप एक कोशिश विचार कर सकते हैं/कैच (यदि आप को पता है क्यों यह पार्स नहीं होगा चाहते हैं), या int.TryParse है, जो सफलता इंगित करने के लिए सही वापस आती है और एक चर, क्षेत्र, या सरणी सूचकांक को पार्स पूर्णांक प्रदान करती है:

if(int.TryParse(Console.ReadLine(), out test[1]) 
    Console.WriteLine("Successfully parsed integer"); 
else 
    Console.WriteLine("Please enter an integer."); 
+0

कोशिश/पकड़ के साथ त्रुटियों को संभालने के लिए अद्यतन करने के लायक हो सकते हैं - अन्यथा यह – Charleh

+2

फेंकता है @ चार्लेह मैं अपवाद से बचने के लिए कोशिश/पकड़ने के लिए tryparse पसंद करेंगे –

+0

शुरुआत के लिए सबसे अच्छा जवाब। इसके अलावा, एआर 0 में 0 से शुरू होता है ... –

2

कंसोल। पढ़ें() कुंजी ent के ASCII मान देता है जुटी। उदाहरण के लिए यदि आप "ए" टाइप करते हैं, तो आपको मूल्य 65 मिलता है जो "ए" के लिए ASCII कोड है।

आप एक पूर्णांक के लिए अपने स्ट्रिंग पार्स करने की आवश्यकता होगी:

for (i = 0; i < 4; i++) 
{ 
    Console.WriteLine("Please enter test " + i); 
    string input = Console.ReadLine(); 
    int value; 
    bool success = int.TryParse(input, out value); 
    if (success) 
    { 
     test[i] = value 
    } 
    else 
    { 
     // Show an error message that the user must enter an integer. 
    } 

    Console.ReadLine(); 

}     

यह भी ध्यान रखें सरणियों 1 के साथ सी # में 0 से आरंभ अनुक्रमित रहे हैं कि, नहीं के रूप में अपने कोड मान लिया गया है।

वैकल्पिक रूप से आप अभी भी Console.Read() का उपयोग कर सकते हैं, जो दर्ज किए गए वर्ण का पूर्णांक प्रतिनिधित्व देता है, पुष्टि करें कि चरित्र वास्तव में एक संख्या है, और ASCII कोड से उचित संख्या में परिवर्तित करें।

+0

अच्छी पकड़। मेरी प्रतिक्रिया सुधार दी। –

+0

कोई समस्या नहीं है। -1 -> +1 – NominSim

+0

TryParse आउट पैरामीटर की अपेक्षा करता है: 'int.TryParse (स्ट्रिंग इनपुट, आउट आउट आउटपुट);' – rcdmk

2

docsConsole.Read() से "मानक इनपुट स्ट्रीम से अगला वर्ण पढ़ता है।"

आप अगले पूर्णांक चाहते हैं, इसलिए

bool cont = false; 
int val = 0; 
do 
{ 
    cont = int.TryParse(Console.ReadLine(), out val); 
    if(!cont){Console.WriteLine("please enter a real number you fool");} 
} while (!cont); 

की तरह कुछ काम करना चाहिए।

+1

फेंकने की वजह से int.Parse की तुलना में बेहतर - आप कहने के लिए कोई और कह सकते हैं कि 'कृपया एक असली नंबर दर्ज करें जिसे आप मूर्ख बनाते हैं' आदि – Charleh

+0

@ चार्लेह मूर्खों की सहायता के लिए अपडेट किया गया। – NominSim

+1

जब मैंने स्टैक एक्सचेंज पर यह पॉप-अप देखा तो मैंने बस अपना पेय थूक दिया! – Charleh

2
 int[] test = new int[3]; 

     for (int i = 0; i < 3; i++) 
     { 
      Console.WriteLine("Please enter test " + i + 1); 
      test[i] = Int.Parse(Console.ReadLine()); 
     } 
     for (int i = 0; i < 3; i++) 
     { 
      Console.WriteLine(test[i]); 
      Console.ReadLine(); 
     } 

आप देख सकते हैं, सरणियों सूचकांक 0 से शुरू होता है, इसलिए [4] (अपेक्षित एक से अधिक पूर्णांक) पूर्णांक परिभाषित करने के लिए कोई जरूरत नहीं है, और आप लंबाई -1

के सूचकांक 0 से पाश की जरूरत है
+0

स्ट्रिंग से कनवर्ट करना भूल गए। – spender

+0

हाँ ... इसे अपडेट किया गया :-) – eyossi

2

समस्या यह है कि आप चरित्र में पढ़ रहे हैं। जैसा कि आप देख रहे हैं "51" संख्या 3 के लिए दशमलव (आधार 10) ASCII मान है।

string result = Console.ReadLine(); 
int grade = 0; 
int.TryParse(result, out grade) 
test[i] = grade; 
0

यहाँ कोड है:: आपको क्या करने की जरूरत है निम्नलिखित है

पूर्णांक [] परीक्षण = नई int [3];

 for (int e = 0; e < 3; e++) 
     { 
      Console.WriteLine("Please enter test "); 
      test[e] = int.Parse(Console.ReadLine()); 
     } 


     Console.WriteLine("000000000000000000000000000\n"); 

     for (int e = 0; e < 3; e++) 
     { 

      Console.WriteLine(test[e]); 
      //Console.ReadLine(); 

     } 
संबंधित मुद्दे