У меня возникли проблемы, понимающие эту проблему. Код действительно базовый, но он ведет себя довольно неожиданно. Код представляет собой упрощенную версию подпрограммы для извлечения и сохранения в отдельный файл данных за день 15 каждого месяца из ежедневной базы данных. В чем проблема ? Первый cout печатает количество дней, в которые вводится внешний. Затем есть некоторые условные строки для выбора правильного дня (в данном примере это не очень важно), а затем есть блок, внутренний if, который должен распечатать данные за день 15 в новый файл. Теперь, как вы можете видеть, в то время как внешний цикл (внимание!) Вводится только на 10-м (и это уже неправильно - он должен был записать все числа от 11 до 15), но затем он также печатает, что файл написан на 15! В чем проблема ? ВНЕШНИЙ ИФ был введен только 10-го числа, как может быть INNER IF исполнять на 15-м ????Вложенный Если дилемма
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
string newdata="mamma";
string risultato="-";
string PriorLine="-";
int PriorDay=0;
int lastmonth=0;
// Loops through all the months
for (int mese=1; mese <=12; mese++)
{
//Loops through all the days in the month
for(int day=1; day<=30; day++)
{
// at the month's beginning these 2 strings are set ="-"
if (mese != lastmonth)
{
risultato="-";
PriorLine="-";
}
// if we are between the 10th and the 20th and the result is still to be found
if (day>=10 && day<=20 && risultato=="-")
{
cout << day << endl; // LISTS ALL THE DAYS THIS LOOP IS ENTERED
if (day=15) // if it is exactly day 15 print that day's result
risultato=newdata;
// if that month in the data there is no day 15 and
// this is the second pass, choose the closest !
if (day>15 && PriorLine !="-")
{
if (abs(day-15)<=abs(15-PriorDay))
risultato=newdata;
else
risultato=PriorLine;
}
PriorLine=newdata;
PriorDay=day;
if (risultato != "-")
{
// writes the result (risultato) in a file
cout << "file written on the " << day << endl;
}
}
lastmonth=mese;
}
}
system("pause");
return 0;
}
Проследили ли вы это в отладчике? – ChrisF
Я думаю, что это 'if (day> = 10 && day <= 20 && risultato ==" - ")' может быть внутри 'if (mese! = Lastmonth)', поскольку первое не удается, если последнее не работает. –
'for (int day = 1; day <= 30; day ++)' Возможно, вам удалось уйти от вас, чтобы в мае было 31 день? - И Май не за горами! –