Компилятор пропускает строку
cin.getline(FileName, 100);
Вызванную внутри функции SelectFile()
Листинг:
#include <iostream>
#include <fstream>
#include <windows.h>
#include <cstdio>
using namespace std;
void Choice();
char SelectFile();
char SelectFile()
{
char FileName[100];
cout << "Название файла";
cin.getline(FileName, 100);
cout << "\nВы ввели путь :\n";
fstream io;
io.open(FileName,ios::in|ios::out|ios::binary);
if(!io)
{
cout << "\n\n\n\t\t\tНе удаётся открыть файл!\n\n\n";
SelectFile();
}
cout << FileName;
return 0;
}
void Choice()
{
char key;
cout << "\n\n\n\Выбери функцию, введя соответствующую цифру и затем Enter:\n\n\n";
cout << "\t1. Выбор файла\n\t2. Подсчёт симолов в файле "<< " "<<"\n\t3. Подсчёт уникальных символов в файле и частот их появления\n\t4. Структурирование частоты появления символов средствами STL\n\t5. Сборка нового сжатого алфавита средствами STL и вывод таблицы кодируемых символов\n\t6. Кодировка данного текста в новый файл, сохранение файла\n\t7. Расшифровка файла с использованием новой таблицы символов\n";
cin >> key;
switch (key)
{
case '1':
cout << "Давай выберем файл\n";
SelectFile();
break;
case '2':
cout << "Давай посчитаем символы в твоём файле\n";
break;
case '3':
cout << "Давай посчитаем уникальные символы в твоём файле\n";
break;
case '4':
cout << "Давай структурируем частоты появления символов твоего файла\n";
break;
case '5':
cout << "Давай соберём новый сжатый алфавит для твоего файла";
break;
case '6':
cout << "Давай зашифруем текст в новый файл\n";
break;
case '7':
cout << "Давай расшифруем текст из зашифрованного файла";
break;
default:
cout << "\n\n\n\n\t\t\t\tОшибка ввода!\n\n\n\n\n";
system("pause");
Choice();
}
}
int main()
{
setlocale(LC_ALL, "RUS");
char l;
cin >> l;
cout << "Приветствие\n\n\n";
system("pause");
Choice();
system("pause");
}
cin >> keyчитаете только цифру 1, а энтер не читаете. Поэтому строкаcin.getline(FileName, 100);читает этот ваш оставшийся энтер после цифры 1, и название файла получается пустым – andreymal Jan 02 '20 at 02:0801foo.txtи нажать энтер, и таким образом в переменнойFileNameавтоматически окажетсяfoo.txt. Нолик прочитается в строкеcin >> l, единичка в строкеcin >> key, а всё остальное до энтера отправится в getline – andreymal Jan 02 '20 at 02:09