Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

КАК правильно считать матрицу из текстового файла?

32K
04 июля 2010 года
paska
26 / / 06.02.2009
Здравствуйте. Подскажите пожалуйста что неправильно в коде. Выдает неправильный результат. В заранее огромное спасибо.
Код:
int _tmain(int argc, _TCHAR* argv[])
{
    int N=3,a[3][3],i,j;
    FILE *in;
    if((in = fopen("in.txt","r"))==NULL)
    {
        cout << "error" << endl;
        return 0;
    }
   fscanf(in,"%d",&N); //Считали N
   for(i=0;i<N;i++) //считываем матрицу
    {
     for(j=0;j<N;j++)
     
       fscanf(in,"%d",&a[j]);
    }
   fclose(in);
   for(i=0;i<N;i++)
    {
     for(j=0;j<N;j++)
       cout << a[j];
     cout <<endl;
    }
   getch();
}

файл следующего вида:
3
123
456
789
2.1K
04 июля 2010 года
Norgat
452 / / 12.08.2009
мде... сколько раз уже писали - если C++, то нужно юзать fstream ...

Код:
#include <fstream>
#include <iostream>
#include <conio.h>

using namespace std;

void main()
{
    ifstream inp("in.txt");
    int len;
    inp >> len;

    int buf = 0;
    for(int i = 0; i < len; ++i)
    {
        inp >> buf;
        cout << buf << endl;
    }

    inp.close();
    _getch();
}


по аналогии с твоей задачей... если каждый символ в файле - элемент матрицы, то и считывай по 1 символу, т.е. по char, а потом конвертируй его в число.

а любая ф-ция чтения будет считывать число до разделительного символа(пробел, табуляция, перевод строки, конец файла)
32K
04 июля 2010 года
paska
26 / / 06.02.2009
сделал через fstream , но результат тот же.
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{

    ifstream in("in.txt");
    int n;
    in >> n;
    int mas[3][3];

    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<n; j++)
            in >> mas[j];
    }
    in.close();
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<n; j++)
            cout << mas[j];
        cout <<endl;
    }
   getch();
}
50K
04 июля 2010 года
Roman_pilot
16 / / 10.02.2010
Попробуй использовать Debug, прогони пошагово и посмотри что не так в твоем алогоритме (я так делал), а так сложно сказать , что не правильно, не понятно что на входе, а что должно быть на выходе.
2.1K
04 июля 2010 года
Norgat
452 / / 12.08.2009
Цитата: Norgat

а любая ф-ция чтения будет считывать число до разделительного символа(пробел, табуляция, перевод строки, конец файла)



я это для кого писал? стенке?

чтобы считать цифры из файла обычным способом(тот который дал я), нужно что бы между цифрами был пробел.

т.е. вместо

Цитата:
3
123
123
123



надо:

Цитата:
3
1 2 3
1 2 3
1 2 3




а если сильно надо считывать цифры содержащие по 1 разряду и не разделённые пробелами, то это нужно делать через считывание по 1 символу.
т.е. считывать по 1 символу(char) и переводить этот символ в число.

Цитата: Roman_pilot
Попробуй использовать Debug, прогони пошагово и посмотри что не так в твоем алогоритме (я так делал), а так сложно сказать , что не правильно, не понятно что на входе, а что должно быть на выходе.



да всё тут понятно, он считывает из файла числа в не инициализированную матрицу, в файле 3 числа(не считая первого), а он считывает 9 чисел... отсюда и та фигня, что идёт на консоль

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог