@HayterWayper

Почему функция New File не работает так положено??

Код
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

struct date
{
	int Umiditatea;
	int CodZien;
	float Temperatura;
	float VitezaVint;
	char DirVint[3];
}zi[30];

void RewriteFile();
void ReadDate();

void NewInfo();
void DelLine();
void TempMed();
void Atributes();
void TempMin();
void VintMax();
void DirVintDes();
void NewFile();

int n = 0;
int i = 0;

void ReadDate()
{
	ifstream in("File_meteo.txt");
	while (!in.eof())
	{
		in >> zi[i].CodZien
			>> zi[i].Temperatura
			>> zi[i].Umiditatea
			>> zi[i].DirVint
			>> zi[i].VitezaVint;

		if (!in.eof())
			i++;
	}
	n = i;
	in.close();
}

void NewInfo()
{
	cout << "\n-------------------------------------\n";
	cout << "Introduceti codul zilei (ex: -034- ): ";
	cin >> zi[i].CodZien;
	cout << "Temperatura zilei (*C) : ";
	cin >> zi[i].Temperatura;
	cout << "Umiditatea (%) : ";
	cin >> zi[i].Umiditatea;
	cout << "Directia vantului (NE, SW etc) : ";
	cin >> zi[i].DirVint;
	cout << "Viteza vantului (m/s) : ";
	cin >> zi[i].VitezaVint;

	ofstream out("File_meteo.txt",ios::app);

	out << zi[i].CodZien << " " << zi[i].Temperatura << " "
		<< zi[i].Umiditatea << " " << zi[i].DirVint << " "
		<< zi[i].VitezaVint;

	i++;
	n = i;
	out.close();
}

float media = 0;
void TempMed()
{
	for (int i = 0; i < n; i++)
	{
		media += zi[i].Temperatura;
	}
	media = media / n;

	cout << "Temperatura medie este " << media << " *C\n";
}

float temp_min;
void TempMin()
{
	temp_min = zi[0].Temperatura;
	for (int i = 1; i < n; i++)
	{
		if (temp_min > zi[i].Temperatura)
			temp_min = zi[i].Temperatura;
	}
	for (int i = 0; i < n; i++)
	{
		if (zi[i].Temperatura == temp_min)
			cout << "Ziua cu temperatura cea mai joasa are codul: " << zi[i].CodZien << endl;
	}
}

float vit_max;
void VintMax()
{
	vit_max = zi[0].VitezaVint;
	for (int i = 1; i < n; i++)
	{
		if (vit_max < zi[i].VitezaVint)
			vit_max = zi[i].VitezaVint;
	}
	for (int i = 0; i < n; i++)
	{
		if (zi[i].VitezaVint == vit_max)
			cout << "Ziua cu viteza maxima a vatului are codul: " << zi[i].CodZien << endl;
	}
}

void Atributes()
{
    cout << "\nCaracteristicile zilelor fara vant:\n";

	for (int i = 0; i < n; i++)
	{
		if (zi[i].VitezaVint == 0)
		{
			cout << "\tCodul zilei: - " << zi[i].CodZien << " - \n";
			cout << "\tTemperatura zilei: " << zi[i].Temperatura << " *C\n";
			cout << "\tUmiditatea zilei: " << zi[i].Umiditatea << " %\n";
			cout << "\tDirectia vantului: " << zi[i].DirVint << endl << endl;

		}
	}
}
char direction[3] = "E";
void NewFile()
{
    for(i=0; i<n; i++)
    {
        if(zi[i].DirVint==direction)
        {
        cout<<zi[i].DirVint<<endl;

        ofstream fout("Est.txt",ios::app);

        fout << zi[i].CodZien << " " << zi[i].Temperatura << " "
		<< zi[i].Umiditatea << " " << zi[i].DirVint << " "
		<< zi[i].VitezaVint<<endl;

		fout.close();
        }
    }
}

//Functia ce sterge o linie din Fisier.
int cod;
int poz = -1;

//Functia ce rescrie Fisierul. Foloseste la stergerea unei linii.
void RewriteFile()
{
	ofstream out("File_meteo.txt");

		out << zi[i].CodZien << " " << zi[i].Temperatura << " "
			<< zi[i].Umiditatea << " " << zi[i].DirVint << " "
			<< zi[i].VitezaVint;

    out.close();
}

void DelLine()
{
	cout << "Codul liniei pentru stergere - ";
	cin >> cod;

	for (i = 0; i < n; i++)
		if (zi[i].CodZien == cod)
			poz = i;

	if (poz == -1)
		cout << "Nu exista asa carte!";

	else
	{
		n--;
		for (int i = poz; i < n; i++)
		{
			zi[i].CodZien = zi[i + 1].CodZien;
			zi[i].Umiditatea = zi[i + 1].Umiditatea;
			strcpy(zi[i].DirVint,zi[i+1].DirVint);
			zi[i].Temperatura = zi[i + 1].Temperatura;
			zi[i].VitezaVint = zi[i + 1].VitezaVint;
		}
		void RewriteFile();
	}
}

int main()
{
	int ch;

	do
	{
		cout << "Alegeti operatia dorita:\n";

		cout << "\t 0-Iesire din program. (EXIT)\n";
		cout << "\t 1-Inregistrarea datelor despre o zi noua.\n";
		cout << "\t 2-Stergerea datelor a unei linii.\n";
		cout << "\t 3-Temperatura medie pe o perioada.\n";
		cout << "\t 4-Informatii despre zilele fara vant.\n";
		cout << "\t 5-Ziua cu temperatura cea mai joasa.\n";
		cout << "\t 6-Ziua cu viteza maxima a vantului.\n";
		cout << "\t 7-Directia din care cel mai des a batut vantul.\n";
		cout << "\t 8-Crearea Fisier cu zilele cu vantul din est, in ordine ascendenta a temp.\n";
		cout << ">>"; cin >> ch;

		switch (ch)
		{
			case 1:
			{
				ReadDate();
				NewInfo();
				break;
			}
			case 2:
			{
				ReadDate();
				//DelLine();
				break;
			}
			case 3:
			{
				ReadDate();
				TempMed();
				break;
			}
			case 4:
			{
				ReadDate();
				Atributes();
				break;
			}
			case 5:
			{
				ReadDate();
				TempMin();
				break;
			}
			case 6:
			{
				ReadDate();
				VintMax();
				break;
			}
			case 7:
			{
				ReadDate();
				//DirVintDes();
				break;
			}
			case 8:
			{
				ReadDate();
				NewFile();
				break;
			}
		}

	}
	while (ch != 0);

	return 0;
}
  • Вопрос задан
  • 91 просмотр
Решения вопроса 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Тут ошибка:
if(zi[i].DirVint==direction)
Так нужно исправить
if(strcmp(zi[i].DirVint,direction) == 0)
Ответ написан
@Sumor
Это же C++. Он за вас не будет сравнивать массивы символов.
if(zi[i].DirVint==direction)
В этом месте у вас сравниваются указатели на строки, а они, очевидно, разные.
Вместо == нужно использовать методы типа strcmp или strncmp.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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