C ++ файлы из ввода, я не могу найти, где мой код не работает - PullRequest
0 голосов
/ 04 апреля 2020

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

#include <iostream>
#include <fstream>
#include <cstring>
#define LMAX 20
#define ERR1 -1
using namespace std;

int main()
{
ifstream infile;
char filename[LMAX];
cout << "Insert filename :" << '\n' << endl;
int i=0;
while (filename[LMAX]!= '\0')
{
  cin >> filename[LMAX];
}
char* p1=nullptr;
p1=(char*) malloc (strlen(filename)*sizeof(char));
p1=&filename[LMAX];
infile.open("filename[LMAX]");
if(!infile.is_open())
{
  cerr << "File not found!" << '\n' << endl;
  return ERR1;
}
return 0;
}

1 Ответ

0 голосов
/ 04 апреля 2020
#include <iostream>
#include <fstream>
#include <cstring>
#define LMAX 20
#define ERR1 -1
using namespace std;

int main()
{
ifstream infile;
char filename[LMAX];
cout << "Insert filename :" << '\n' << endl;

// This is not the way to read a string
/*
int i=0;
while (filename[LMAX]!= '\0')
{
  cin >> filename[LMAX];
}
*/

// Read your filename directly using cin
cin >> filename;

// This is an unused variable
/*
char* p1=nullptr;
p1=(char*) malloc (strlen(filename)*sizeof(char));
p1=&filename[LMAX];
*/

// Why are you passing the variable name as the filename?
/* infile.open("filename[LMAX]"); */

// Pass the actual filename
infile.open(filename);

if(!infile.is_open())
{
  cerr << "File not found!" << '\n' << endl;
  return ERR1;
}
return 0;
}

В сторону:

  1. C ++ имеет std::string для работы со строками, так почему же придерживаться старого массива char?

  2. cin >> filename не будет читать строку с пробелами. Возможно, вы захотите посмотреть это .

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