Чтения чисел с типом double
double[,] A = new double[n, n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
A[i, j] = sr.Read();
В Файле находятся вещественные числа, при считывании их в матрицу А, происходит не то что надо. Вместо того чтобы записать 9.2 записывается 56.
В чём тут подвох?
double[,] A = new double[n, n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
A[i, j] = sr.Read();
В Файле находятся вещественные числа, при считывании их в матрицу А, происходит не то что надо. Вместо того чтобы записать 9.2 записывается 56.
В чём тут подвох?
выше уже написали - ты читаешь посимвольно.
и ещё... нужно использовать using(...){...}.
ну как то так можно считать матрицу 3x3 из файла:
using (var sr = new StreamReader(path))
{
string[] buf;
for (int i = 0; i < 3; i++)
{
buf = sr.ReadLine().Split(' ');
for (int j = 0; j < 3; j++)
{
matr[i, j] = double.Parse(buf[j]);
}
}
}
и ещё... нужно использовать using(...){...}.
считаю что использование using не принципиально для такой прожки, можете привести веский мотив?
для этой - нет.
но часто нужно считать данные из файла в начале работы, а потом переписать этот файл заново или дописать что-то туда, а using эквивалентно следующей конструкции(взято с MSDN):
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
т.е. это гарантия вызова Dispose(), что для файла равносильно вызову Close(), который, кстати, всего лишь вызывает внутри себя Dispose - что гарантирует освобождение файлового дескриптора.
имхо, лучше сразу приучить себя к правильному стилю(благо тут всего 3 строчки, которые в VS набираются: using-Tab-Tab-*ввод кода для открытия файла*-Enter), чем потом заставлять себя использовать using(иногда же просто на автомате пишешь так, как привык, а не так, как правильно).
имхо, лучше сразу приучить себя к правильному стилю(благо тут всего 3 строчки, которые в VS набираются: using-Tab-Tab-*ввод кода для открытия файла*-Enter), чем потом заставлять себя использовать using(иногда же просто на автомате пишешь так, как привык, а не так, как правильно).
я потому и спросил, что вы привели пример как раз плохого стиля
а можно подробней, почему?
, у кого-то может сложиться впечатление что использование этой конструкции обязательно всегда и везде, а это как раз не так и в большинстве случаев будет плохим стилем
и П.С. по поводу ваших последующих разъяснений: во-первых не понятно все-таки как из потребности
вытекает необходимость использования using и не понятно чем это лучше простого Close()
и П.С. по поводу ваших последующих разъяснений: во-первых не понятно все-таки как из потребности вытекает необходимость использования using и не понятно чем это лучше простого Close()
лучше тем, что при возникновении эксепшена во время чтения данных из файла его файловый дескриптор(файла) будет освобождён в любом случае(не зависимо от того продолжит ли программа свою работу или же нет).
угу, а по вашему в Эндрю Троелсена просто так в каждом примере с открытием файла на чтение используется using?
выше написал про случай с эксепшеном.
оставлю только пару коментариев напоследок:
это по сути съедание исключений, что есть очень плохой стиль программирования. и для справки: конструкция using придумана для случаев когда некоторый ресурс нужно освободить чем раньше тем лучше -- на сборщик мусора полагаться нельзя т.к. неизвестно когда он сработает, а оператора delete в C# нет.
думайте своей головой в первую очередь. а троельсен не такой уж авторитет, читал я кое что из него
Оба способа правомерны. Главное - приучить себя всегда обрабатывать возможные ошибки/исключения тем или иным способом.