Почему цикл for срабатывает 2 раза? Код в вопросе
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
const int Bukvi = 1000000;
char Slovo[Bukvi];
string Path;
string Name;
fstream fs;
ofstream of;
cout << ("Введите путь куда вы хотите создать файл: ");
cin >> Path;
cout << ("Введите название файла с расширеннием: ");
cin >> Name;
of.open (Path + "/" + Name, ofstream::app);
if (! of.is _open())
{
cout << ("Ошибка! Файл не был создан. \n \n");
cout << ("Код ошибки: 00001\n\n\n\n\n");
}
else
{
cout << ("Файл создан в: " + Path + "/" + Name + "\n\n");
for (int lol = 0; lol < 5; lol++)
{
cout << ("Введите что вы хотите вписать в файл: ");
cin.getline(Slovo, Bukvi);
of << (Slovo);
of << ("\n");
}
}
тоесть он выводит Введите что вы хотели вписать два раза
потому что в цикле, сколько раз цикл пройдется, столько и выведется
Потому, что совмещение в коде ввода через cin >> и ввода через cin.getline приводит к странным последствиям.
Можешь всё вводить через cin.getline, можешь перед циклом выполнить сброс буфера ввода (cin.ignore).
Перед
cin.getline(Slovo, Bukvi);
надо прочистить cin
cin.clear();
fflush(stdin);
То есть вот так:
cout << ("Введите что вы хотите вписать в файл: ");
cin.clear();
fflush(stdin);
cin.getline(Slovo, Bukvi);
Полный код для mingw (проверено на msys2):
#include <iostream>
#include <locale>
#include <codecvt>
#include <string>
#include <stdexcept>
#include <vector>
#include <fstream>
#include <sys/stat.h>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "Russian");
const int Bukvi = 1000000;
char Slovo[Bukvi];
string Path;
string Name;
fstream fs;
ofstream of;
cout << ("Введите путь куда вы хотите создать файл: ");
cin >> Path;
cout << ("Введите название файла с расширеннием: ");
cin >> Name;
of.open (Path + "/" + Name, ofstream::app);
if (! of.is_open())
{
cout << ("Ошибка! Файл не был создан. \n \n");
cout << ("Код ошибки: 00001\n\n\n\n\n");
}
else
{
cout << ("Файл создан в: " + Path + "/" + Name + "\n\n");
for (int lol = 0; lol < 5; lol++)
{
cout << ("Введите что вы хотите вписать в файл: ");
cin.clear();
fflush(stdin);
cin.getline(Slovo, Bukvi);
of << (Slovo);
of << ("\n");
}
}
return 0;
}
Компиляция через строку так:
g++ 1.cpp -DUNICODE -lopengl32 -LC:/msys32/mingw32/lib -lmingw32 -lmingw32 -ldxerr8 -ldinput8 -lshell32 -lsetupapi -ladvapi32 -luuid -lversion -loleaut32 -lole32 -limm32 -lwinmm -lgdi32 -luser32 -lm -Wl,--no-undefined -pipe -lmingw32
не знаю с++ но по ощущениям там какой то оператор в теле цикла - после надписи - можно выполнять только один раз. А при попытке выполнить второй раз цикл прерывается.