Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Read()


Автор: Flenger 16.1.2008, 21:31
Доброе время суток!!!!

как мне написать так что бы прога(Console Application) давала мне право:
 
1) вводить только цыфры (текстовые символы нельзя)
2) и выводить те цыфры которые я вписал а не ASCII номер

Код

using System;
using System.Text;

namespace BetaTesting
{
    class Basic
    {
        public static void Main()
        {
            int n;
            n = Console.Read();      //  метод Read() читает текстовый символ, а не числовой и возвратит он число типа int, которое представляет ASCII номер, а не число, которое ты водишь.     
            Console.WriteLine("{0}", n);
        }
    }
}

на С++ было попроще с этим

я попробовал решить вот как

Код

public static void Main()
        {
            string n;
            n = Console.ReadLine();
            int b = Convert.ToInt32(n);            
            Console.WriteLine("{0}", b);
        }



это вроде работает, но нельзя как то без конвертации??? и как сделать что бы вводить можно было только числа???

Зарание Благодарен!!!

Автор: 0000 16.1.2008, 22:39
Код

static void Main(string[] args)
        {
            try
            {
                Int32 number = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Number = {0}", number);
            }
            catch (FormatException e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadLine();
        }


с конвертацией код не заметил сначала....сорри
а метод Read тебе вообще не вернет то, что ты хочешь - он берет тока 1 символ из входного потока...так что тока так

Автор: Magnetic 16.1.2008, 22:58
Цитата(Flenger @  16.1.2008,  21:31 Найти цитируемый пост)
как сделать что бы вводить можно было только числа???


Код

            ConsoleKeyInfo c;
            StringBuilder number = new StringBuilder(100);
            while ((c = Console.ReadKey(true)).Key!= ConsoleKey.Enter)
            {
                if (Char.IsDigit(c.KeyChar))
                {
                    number.Append(c.KeyChar);
                    Console.Write(c.KeyChar);
                }
            }
            Console.WriteLine();
            int numberValue = int.Parse(number.ToString());
            Console.WriteLine(numberValue);
            Console.ReadLine();



Автор: source777 16.1.2008, 23:20
Цитата

на С++ было попроще с этим

я попробовал решить вот как
...
это вроде работает, но нельзя как то без конвертации??? и как сделать что бы вводить можно было только числа???
Интересно, как же ты решал эту задачу на С++? да ещё и без конвертации, особенно учитывая тот факт, что в терминале можно ввести только символы/строки, а уж никак не числа...

Автор: Flenger 17.1.2008, 18:51
Magnetic, 0000 - Спасибо!!!!

source777 - отвечаю на твой вопрос, да мне на С++ было проще это сделать без конвертации, допустим даже так:

Код

#include "stdafx.h"
int Text(int b);
int _tmain(int argc, _TCHAR* argv[])
{
    int a = 0;
    int c = Text(a);
    cout<<c;
    return 0;
}
int Text(int b) {
    cin>>b;
    return b;
}


source777 извени что код не элегантен, так как время на старания небыло + плюс сюда можно было ввести какой то обработчик, что бы он выдавал что вы вводете буквы... я помню там вроде какая то стандартная функцыя была которая недавала вводить буквы....



Автор: source777 17.1.2008, 20:02
Да, пожалуй соглашусь, что неявная конвертация:
Код

   int b;
   cin>>b;

проще, чем явная:
Код

   int b = 0; 
   Int32.TryParse(Console.ReadLine(), out b);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)