Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2013, 01:44   #1
Tekinserega
 
Регистрация: 19.11.2012
Сообщений: 7
По умолчанию Вопрос по C#

Уважаемые, помогите. Суть программы такова: Программа для выбора случайного студента. В текстовом файле занесены ФИО студентов (каждое ФИО на новой строчке). При запуске программа считывает данные из этого файла, выбирает случайного студента и выводит его ФИО в консоль.
Программа вместо того, что бы выдать имя и фамилию, выдает знаки вопроса. Вот код моей программы:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = "text.txt";
            string[] massiv = File.ReadAllLines(path);
            int x = massiv.Length;
            var rnd = new Random(); 
            int y;
            y = rnd.Next(0, x);
            Console.WriteLine(massiv[y]);
        }
    }
}
Файл text.txt находиться в папке дебаг, то есть, этот файл прочитывается. Помогите разобраться)

Последний раз редактировалось Stilet; 12.01.2013 в 14:43.
Tekinserega вне форума Ответить с цитированием
Старый 12.01.2013, 02:31   #2
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

наверное дело в кодировке? Попробуйте использовать List вместо массива
Код:
List<string> FIO = new List<string>();
а чтение из файла производить через StreamReader
Код:
string st;
using(StreamReader path= new StreamReader("text.txt",Encoding.Default)){
while(true){
st=path.ReadLine();
if (st==null) {break;}
FIO.add(st);
}
}
ну и дальше
Код:
int x = FIO.Length;
var rnd = new Random(); 
int y;
y = rnd.Next(0, x);
Console.WriteLine(FIO[y]);
Писал по памяти, могут быть ошибки.
winhttp вне форума Ответить с цитированием
Старый 12.01.2013, 19:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от winhttp
наверное дело в кодировке?
100% уверен, что так и есть!

Если не ошибаюсь, то, по умолчанию, C# работает с файлом, читая его как Unicode.
Поэтому нужно или подготовить файл в такой кодировке,
или изменить процедуру чтения (задать ту кодировку, в которой файл реально. например, если в кодировке Winddows(Win-1251), то это выглядит примерно так:
Код:
string[] massiv = File.ReadAllLines(path, Encoding.GetEncoding(1251));
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос Koritza Microsoft Office Excel 2 05.03.2011 22:30
Вопрос. Алексей11 Свободное общение 0 24.02.2011 16:38
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10