@romentigo

C++ — почему программа записывает в файл первую строку пустой?

Всем привет! Зашёл в такой тупик: какую бы я не вводил строку, в файл пишется первая строка пустой, а последняя введённая строка не записывается. Сделал костыль в for, увеличив количество повторов на 1, чтобы могла записываться последняя строка, но из-за этого костыля приходится делать другие костыли, чтобы программа работала нормально. Очень нужно понять, почему происходит такое смещение в строках при записи в файл, чтобы можно было убрать эту "опухоль" в коде.
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <conio.h>

using namespace std;

void Write(int strings)
{
	ofstream file("Строки.txt");
	char temp[100];
	if (!file.is_open())
	{
		cout << "По какой-то причине, файл не может быть открыт." << endl;
	}
	else
	{
		cout << "Вводите строки:" << endl;
		for (int i = 0; i <= strings; i++)
		{
			cin.getline(temp, 100);
			file << temp << "\r\n";
		}		
	}
	file.close();
}

void Read(int strings)
{
	ifstream file("Строки.txt");
	char temp[100];
	char check[] = { ',', '.', '!', '?', '-' };
	int count = 0;

	if (!file.is_open())
	{
		cout << "По какой-то причине, файл не может быть открыт." << endl;
	}
	else
	{
		cout << "\nСчитываю строки...";
		for (int i = 0; i <= strings; i++)
		{
			file.getline(temp, 100);
			cout << temp << endl;
			cout << temp[strlen(temp) - 2] << endl;
		} 
		
	}
	file.close();
}

int main()
{
	setlocale(LC_ALL, "rus");
	
	int strings = 0;

	cout << "Количество строк: ";
	cin >> strings;
	Write(strings);
	Read(strings);

	system("pause");
	return 0;
}
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
mrjbom
@mrjbom
Ух это и вправду проблема, я выяснил почему так происходит - в потоке от cin >> strings; остаётся перенос строки(После нажатия Enter в поток передаётся \n который завершает его).
cin.get() после cin >> strings.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Flyphant Москва
от 60 000 до 80 000 руб.
Агент Плюс Москва
от 200 000 руб.
IXORA Нижний Новгород
от 65 000 руб.
26 марта 2019, в 12:03
10000 руб./за проект
26 марта 2019, в 11:56
1 руб./за проект