открытие более одного входного файла - PullRequest
1 голос
/ 07 апреля 2020

У меня проблемы с созданием меню, в котором регистр «Я открываю оба входных файла», регистр «r» считывает файлы построчно в массив и, наконец, регистр «cf» закрывает файлы. Прямо сейчас это не скомпилируется. Например, как это:

#include <iostream>
#include <fstream>

using namespace std;

std::ifstream inputFile1,inputFile2;

void openinputFiles();
void closeinputFiles();
void readFiles();

int main () 
{

     // menu

     case'i': // open files
     case 'I': openinputFiles();
     break;

     case 'cf': // close files
     case 'CF': closeinputfiles();
     break;

     case 'r': // read file line by line into array
     case 'R': readFiles();
     break;
}

void openinputFiles()
{
   std::cout << "Enter the input filename 1:";
   std::cin >> inputfileName;

   inputFile1.open(inputfileName);
   if(inputFile1.is_open())
      std::cout<<"File 1 Opened"<<std::endl;

   inputfileName.clear();

   std::cout << "Enter the input filename 2:";
   std::cin >> inputfileName;

   inputFile2.open(inputfileName);
       if(inputFile2.is_open())
          std::cout<<"File 2 Opened"<<std::endl;
}

void closeinputfiles() 
{
      inputFile.close();
}

void readFiles() 
{
     // Code
}

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вы вызываете оператор Case без оператора Switch! Я не знаю, сработает ли это с этим, но попробуйте добавить оператор switch перед переходом на Case.

И когда вы закрываете файл, вы используете не определенный объект !!

0 голосов
/ 07 апреля 2020

См.

#include<iostream>
#include<fstream>

int main()
{
    std::ifstream inputFile1,inputFile2;
    std::string   inputfileName;

    std::cout << "Enter the input filename 1:";
    std::cin >> inputfileName;

    inputFile1.open(inputfileName.c_str());
    if(inputFile1.is_open())
        std::cout<<"File 1 Opened"<<std::endl;

    inputfileName.clear();

    std::cout << "Enter the input filename 2:";
    std::cin >> inputfileName;

    inputFile2.open(inputfileName.c_str());
    if(inputFile2.is_open())
        std::cout<<"File 2 Opened"<<std::endl;

    return 0;
}

Вывод:

Enter the input filename 1:text1.txt
File 1 Opened
Enter the input filename 2:text2.txt
File 2 Opened

Process returned 0 (0x0)   execution time : 11.545 s
Press any key to continue.

отлично работает для меня.

РЕДАКТИРОВАТЬ:

вы не можете использовать строку в case вместо этого попробуйте это,

#include<iostream>
#include<fstream>

int main()
{
    char str[3];

    std::cin>>str;

    if(toupper(str[0])=='C')
    {
        if(toupper(str[1])!='F')
             str[0]='\0';
    }

    switch(str[0])
    {
    case 'i': // open files
    case 'I': std::cout<<"Open";
    break;

    case 'c': // close files
    case 'C': std::cout<<"close";
    break;

    case 'r': // read file line by line into array
    case 'R': std::cout<<"Read";
    break;
    }

    return 0;
}

и вы закроете inputfiles () должно быть

void closeinputfiles() 
{
     inputFile1.close();
     inputFile2.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...