Функция C ++ не может выполнить другую функцию и завершается автоматически - PullRequest
0 голосов
/ 18 апреля 2019

Итак, я делал редактор файлов, используя c ++, и он имеет 3 функции, и он должен вызывать друг друга для правильной работы. Но когда код пытается вызвать другие функции, он заканчивается ненормально.

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

необходимо вывести содержимое файла.


#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#include <string>
#include <iomanip>
#include <unistd.h>
#include <sstream>
using namespace std;/* std */

  /* data */
 char buffer;
 std::string fname;

 int reader(){
   std::ifstream readfile;
   readfile.open(fname.c_str());
   readfile>>buffer;
   std::cout << buffer<< '\n';
   int write();
   }
int options(){
  cout << "************************"<< '\n';
  cout << "* Starting File editor *"<< '\n';
  cout << "************************"<< '\n';
  cout << "*    Enter Filename    *"<< '\n';
  cin >>fname;
  cout << "Opening File"<<fname<< '\n';
  int reader();
  std::cout << buffer<< '\n';
   }
int write(){
  cout << "writing to file  " << '\n';
  std::ofstream writefile;
  writefile.open(fname.c_str());
  writefile<<buffer;
  cout << "writing done " << '\n';
   }
int main()
{
  /* code */
  options();

  return 0;
}

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

options() не , звонящий reader(), а reader() не , звонящий write().В обоих случаях вы просто объявляете функции, а не вызываете их .

int reader(){
    ...
    int write(); // <-- a declaration, not a call!
}

int options(){
    ...
    int reader(); // <-- a declaration, not a call!
    ... 
}

int main() {
    ...
    options(); // <-- a call, not a declaration!
    ..
}

Попробуйте вместо этого:

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

/* data */
char buffer;
std::string fname;

int reader(){
    cout << "opening file " << fname << '\n';
    std::ifstream readfile(fname.c_str());
    readfile >> buffer;
    std::cout << buffer << '\n';
}

int write(){
    cout << "writing to file " << '\n';
    std::ofstream writefile(fname.c_str());
    writefile << buffer;
    cout << "writing done" << '\n';
}

int options(){
    cout << "************************"<< '\n';
    cout << "* Starting File editor *"<< '\n';
    cout << "************************"<< '\n';
    cout << "* Enter Filename *"<< '\n';
    cin >> fname;
    reader();
    write();
}

int main() {
    /* code */
    options();
    return 0;
}
0 голосов
/ 18 апреля 2019

В дополнение к комментариям выше о вызове функций, кажется, было бы хорошо инициализировать буфер как массив символов, как показано ниже:

#include <iostream>
#include <fstream>
//#include <bits/stdc++.h>
#include <string>
#include <iomanip>
#include <unistd.h>
#include <sstream>
using namespace std;/* std */

/* data */
char buffer[]{"Short test"};
std::string fname;
void write(){
  cout << "writing to file  " << '\n';
  std::ofstream writefile;
  writefile.open(fname.c_str());
  writefile<<buffer;
  cout << "writing done " << '\n';
}
void reader(){
  std::ifstream readfile;
  readfile.open(fname.c_str());
  readfile>>buffer;
  std::cout << buffer<< '\n';
  write();
}
void options(){
  cout << "************************"<< '\n';
  cout << "* Starting File editor *"<< '\n';
  cout << "************************"<< '\n';
  cout << "*    Enter Filename    *"<< '\n';
  cin >>fname;
  cout << "Opening File"<<fname<< '\n';
   reader();
  std::cout << buffer<< '\n';
}

int main()
{
  /* code */
  options();

  return 0;
}
0 голосов
/ 18 апреля 2019

Вы можете объявить функции (не обязательные в вашем случае) после всех #include операторов, таких как:

int reader();
int write();
int options();

Вы вызываете функцию записи как write(); Функция чтения как reader(); Поскольку функции не возвращаютсявсе, что вы можете изменить int reader() на void reader(), int write() на void write() и так далее.Оставьте основной как int main().

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