@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;
}
  • Вопрос задан
  • 779 просмотров
Решения вопроса 1
mrjbom
@mrjbom
Ух это и вправду проблема, я выяснил почему так происходит - в потоке от cin >> strings; остаётся перенос строки(После нажатия Enter в поток передаётся \n который завершает его).
cin.get() после cin >> strings.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы