2014-01-18 4 views
0

Я новичок в C++, и я пытаюсь понять, как работает in/output в файле. Эта программа должна написать массив целых чисел в файл, затем прочитать его из файла, отсортировать, получить число квадратных целых чисел и затем записать результаты обратно в файл. Однако, когда я пытаюсь скомпилировать его, он сообщает me that "" < < "Операнд запрещен для класса". Может кто-нибудь, пожалуйста, скажите мне, в чем дело? Я пытаюсь избежать использования .get и .put.Чтение/запись массива из файла C++

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

void sorting(int *p); 
int squares(int *p); 
int main() { 
    int i, arr[10], *p = &arr[0], sq; 
    char name[50]; 
    cout << "Give the file's name:"; 
    cin >> name; 
    ofstream myfile(name, ios::out); 
    cout << "Give the elements:"; 
    for (i = 0; i < 10; i++) 
     myfile << *(p + i); 
    myfile.close(); 

    ifstream myfile(name, ios::in); 
    for (i = 0; i < 10; i++) 
     myfile >> *(p + i); 
    sq = squares(arr); 
    sorting(arr); 
    myfile.close(); 
    ofstream myfile(name, ios::app); 
    for (i = 0; i < 10; i++) { 
     myfile << "The sorted array is:"; 
     myfile << *(p + i); 
    } 
    myfile << "The number of square numbers is: " << sq; 
    myfile.close(); 
    return 0; 
} 
void sorting(int *p) { 
    int temp; 
    for (int i = 0; i < 9; i++) 
     for (int j = i + 1; j < 10; j++) 
     if (*(p + i)>*(p + j)) { 
      temp = *(p + i); 
      *(p + i) = *(p + j); 
      *(p + j) = temp; 
     } 
} 
int squares(int *p) { 
    int count = 0; 
    for (int i = 0; i < 10; i++) 
     if ((*(p + i) % 2) == 0) 
     count++; 

    return count; 
} 
+0

Добавлен тег C++ для вас. Сделайте что-нибудь в отступе. –

+0

Ну, во-первых, вы несколько раз переопределяете 'myfile'. Вместо этого каждый раз, когда вы используете 'ifstream myfile (name, ios :: in);' добавляете число. Поэтому 'ifstream myfile1 (name, ios :: in);', 'ifstream myfile2 (name, ios :: in);' и 'ifstream myfile3 (name, ios :: in);'. – zero298

ответ

1

Вы повторно определяете myfile несколько раз. Измените main() так, чтобы каждое объявление было уникальным. Это компилируется на GCC

int main() { 
    int i, arr[10], *p = &arr[0], sq; 
    char name[50]; 
    cout << "Give the file's name:"; 
    cin >> name; 
    ofstream myfile1(name, ios::out); 
    cout << "Give the elements:"; 
    for (i = 0; i < 10; i++) 
     myfile1 << *(p + i); 
    myfile1.close(); 

    ifstream myfile2(name, ios::in); 
    for (i = 0; i < 10; i++) 
     myfile2 >> *(p + i); 
    sq = squares(arr); 
    sorting(arr); 
    myfile2.close(); 
    ofstream myfile3(name, ios::app); 
    for (i = 0; i < 10; i++) { 
     myfile3 << "The sorted array is:"; 
     myfile3 << *(p + i); 
    } 
    myfile3 << "The number of square numbers is: " << sq; 
    myfile3.close(); 
    return 0; 
} 
+0

Но теперь он не позволяет мне указывать номера с консоли – Georgiana

+0

Я думаю, вам нужно больше '<< cin'. Вы запрашиваете у пользователя только одну переменную, имя файла. – zero298

+0

Проблема была решена. Остался только вопрос: если, например, я использую 'fstream stream_name (filename, ios :: in | ios :: out)', мог бы я читать и записывать в файл, используя только что один поток? – Georgiana

Смежные вопросы