Использование внешнего файла в качестве ввода в C ++ - PullRequest
0 голосов
/ 21 февраля 2012

Как использовать файл с именем dados.txt в качестве входных данных для умножения двух массивов?То есть я не хочу использовать cin, но читаю файл данных dados.txt

#include <iostream>
#include <fstream>
#define MAX 100
using namespace std;
int main()
{
    int A[MAX][MAX], B[MAX][MAX], C[MAX][MAX];
    int m, n, p, i, j, k, aux;
    ifstream arquivo;
    arquivo.open("dados.txt");
    while (arquivo >> aux)
    {
        //cin >> m >> n >> p;
    //read dados.txt
        for (i = 0; i < m; i++)
            for (j = 0; j < n; j++)
                cin >> A[i][j];
        for (i = 0; i < n; i++)
            for (j = 0; j < p; j++)
                cin >> B[i][j];
        for (i = 0; i < m; i++)
            for (j = 0; j < p; j++)
            {
                C[i][j] = 0;
                for (k = 0; k < n; k++)
                    C[i][j] += A[i][k] * B[k][j];
            }
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < p; j++)
                cout << C[i][j] << " ";
            cout << endl;
        }
    }
    arquivo.close();
    return 0;
}

dados.txt Файл содержит следующие данные (пример):

3 5 4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Ответы [ 6 ]

1 голос
/ 21 февраля 2012

Вы уже читаете из файла через файловый поток, который вы объявили, arquivo.Вместо выполнения cin >> A [i] [j], вы просто делаете arquivo >> A [i] [j].Но вам также нужно вывести arquivo >> aux из условия while.То, как вы это настроили, кажется, вы точно знаете, как долго будет длиться цикл.Вам даже не нужен цикл while.Эта часть кода может быть просто:

arquivo.open("dados.txt");
for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
        arquivo >> A[i][j];
for (i = 0; i < n; i++)
    for (j = 0; j < p; j++)
        arquivo >> B[i][j];
for (i = 0; i < m; i++)
    for (j = 0; j < p; j++)
    {
        C[i][j] = 0;
        for (k = 0; k < n; k++)
            C[i][j] += A[i][k] * B[k][j];
    }
for (i = 0; i < m; i++)
{
    for (j = 0; j < p; j++)
        cout << C[i][j] << " ";
    cout << endl;
}
arquivo.close();
0 голосов
/ 21 февраля 2012

Вы можете читать числа из текстового файла, как это.

Открыть поток файлов

ifstream DataFile;  
DataFile.open (fileLocation.c_str(), ios::in); //assume fileLocation is a string type

Чтение и сохранение строки ввода

string input;    
getline(DataFile, input);

И затем вы можете извлечь число из этой строки, используя различные методы (например, те, которые манипулируют строкой, конвертируйте cstring в int / float). Это зависит от того, как много вы знаете о том, как будет выглядеть текстовый файл.

0 голосов
/ 21 февраля 2012

Ссылка на Криса - самая подходящая.Вы можете сделать что-то вроде этого: (посмотрите пример на сайте cplusplus.com)

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
   string line;
   ifstream myfile ("example.txt");
   if (myfile.is_open())
   {
       while ( myfile.good() )
       {
        getline (myfile,line);
        cout << line << endl;
       //maybe a function-call with the string line to extract the values you need
       }
       myfile.close();
   }

   else cout << "Unable to open file"; 

   return 0;
}
0 голосов
/ 21 февраля 2012

Ваш ifstream arquivo на самом деле имеет класс, аналогичный std::cin, поэтому вы можете использовать его точно таким же образом: `arquivo >> m >> n >> p;".

Я не понимаю переменную aux, что вы хотите с ней делать?

0 голосов
/ 21 февраля 2012

Замените cin в коде на arquivo, и все готово (при условии, что логика в порядке).

Как,

arquivo >> m >> n >> p;

Если дать этому объекту более условное имя (например, fin или filein), это не повредит.

0 голосов
/ 21 февраля 2012

Вы ищете эту ссылку:

http://www.cplusplus.com/reference/iostream/fstream/

Объект fstream позволит вам открыть файл и прочитать его содержимое различными способами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...