Top.Mail.Ru
Ответы

Почему цикл 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

Аватар пользователя
Оракул

не знаю с++ но по ощущениям там какой то оператор в теле цикла - после надписи - можно выполнять только один раз. А при попытке выполнить второй раз цикл прерывается.