Андрей
Высший разум
(425166)
1 год назад
Потому, что совмещение в коде ввода через cin >> и ввода через cin.getline приводит к странным последствиям.
Можешь всё вводить через cin.getline, можешь перед циклом выполнить сброс буфера ввода (cin.ignore).
Саша КоффейкоЗнаток (426)
1 год назад
Оу, спасибо! Я поменял все cin'ы на cin.getline и все и в правду стало нормально работать!
Block
Гуру
(4439)
1 год назад
Перед
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
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");
}
}
тоесть он выводит Введите что вы хотели вписать два раза