Проблемы с календарем C ++

Я пытаюсь написать программу, которая выводит календарь. Пользователь должен ввести день начала месяца (понедельник-0, вторник-1 и т. Д.) И количество дней в месяце. В зависимости от того, с какого дня начинается месяц, календарные даты начнутся с этого конкретного дня. У меня возникли проблемы: я не уверен, как запустить календарь в определенный день, и я не уверен, как заставить даты переходить на новую строку после 7 дней. Любая помощь будет оценена. До сих пор мы многому не научились, поэтому мне действительно разрешено использовать только основы, никаких функций или подобных вещей.

Вот что у меня так далеко. Я мог бы быть далеко.

#include <iostream>
#include <iomanip>
#include <conio.h>

using namespace std;

int main()
{
int monthStartDay, daysInMonth;

cout << "Enter the first day of the month: ";
cin >> monthStartDay;
cout << "Enter how many days are in the month: ";
cin >> daysInMonth;

cout<<"\nSun   Mon   Tue   Wed   Thu   Fri   Sat";
cout<<"\n\n"<<setw(2);

for (int x=1; x <= daysInMonth; x++){
cout << x << setw(6);

for (int i=1; i == 6; i++) {
cout << "\n";
}
}
return 0;
}

2

Решение

Решение использует новый индекс, который покажет позиция в строке вашего календаря. То есть:

int startDayPostion = (monthStartDay + 1) % 7;

потому что вы считаете ноль с понедельника, но ваш отпечаток начинается с воскресенья. Следовательно, «сдвиг вправо» является необходимостью. Добавьте строку выше после прочтения monthStartDay,

Затем вам нужно добавить цикл, который будет печатать все нужные вам пробелы и сдвигать вышеупомянутые позиция к желаемому startDayPostion:

int p = 0;
for (; p < startDayPostion; ++p) {
cout << "" << setw(6);
}

(Вставьте это перед вашим for цикл с x)

Теперь, когда у вас есть смена, вы можете просто заполнить остальные ячейки, помня, что вы до конца (Sat).

После

cout << x << setw(6);

продолжайте сдвигать справочный индекс:

++p;

и затем, если вы закончили со строкой, перейдите на новую строку и сбросьте p:

if (p > 6) {
cout << '\n';
p = 0;
}

Я не знаю, почему вы положили сюда for (int i=1; i == 6; i++) цикл … Вы можете просто удалить эти строки кода.

2

Другие решения

Внутренний цикл у вас проверяет, если я == 6, и это никогда не произойдет. Может быть, почему вы чувствуете себя застрявшим?

Здесь нужно решить две проблемы: как поставить новую строку в правильном месте и как дополнить ее до первого дня.

Я оставлю первую проблему для вас.

Трудно оказать конкретную помощь в таких вещах, не давая ответа. Позвольте мне начать с. Если я скажу, что первый день — пятый, а 30 дней, то вы распечатаете 35 вещей. Первые пять — пустое место, а остальные — числа дня.

0

Я думаю, это то, что вы ищете:

    #include <iostream>
#include <iomanip>
#include <conio.h>

using namespace std;

int main()
{
int monthStartDay, daysInMonth;

cout << "Enter the first day of the month: ";
cin >> monthStartDay;
cout << "Enter how many days are in the month: ";
cin >> daysInMonth;

cout<<"\nSun   Mon   Tue   Wed   Thu   Fri   Sat";
cout<<"\n\n"<<setw(2);int offset = monthStartDay;          // offset for the first date
for (int i = 0; i < offset; ++i)
cout << "" << setw(6);             // output blank space

for (int x=1 ; x <= daysInMonth; x++)
{
cout << x << setw(6);
if ((x+offset)%7 == 0)         // after each 7th output we have to
cout << "\n ";             //  make a new line
}
return 0;
}

Также я предполагаю, что в случае заголовка вашего календаря это будет Sunday = 0, Monday = 1, …

0

Вот то, что я взбил — надеюсь, это поможет!

#include "stdafx.h"#include <iostream>
#include <iomanip>

using namespace std;int main()
{
int i, days, startday;

cout << "Please enter the number of days in the month:" << endl;
cin >> days;

cout << "Please enter the starting date of the month (1 = Monday, 7 = Sunday):" << endl;
cin >> startday;

for (i = 1; i < startday; i++)
{
cout << "   ";
}

for (i = 1; i <= days; i++)
{
cout << setw(3) << i;

if ((startday + i - 1) % 7 == 0)
{
cout << "\n";
}
}

cout << endl;

system("pause");

return 0;
}

Дайте мне знать, если требуется уточнение.

0

Это мой проект (включая Leaf Year). Вы можете ссылаться на это.
правила
1. должны использовать En месяц.
2. должны использовать 1 -> 01 ~ 9-> 09
3. Необходимо использовать «——————», когда вниз по линии.
4. Необходимо использовать «Входное значение» для «Выходное значение».

        #include <iostream>
#include <ostream>
#include <iomanip>

using namespace std;

void leafCalendar(int inputYear, int inputMonth);
bool leafYear(int inputYear);
int startToYear(int inputYear);
int startToMonth(int inputYear, int inputMonth);
int finishToDay[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
char display_year[5];
char display_month[3];

int main()
{
int inputYear, inputMonth, i;
char response;
char dayofWeek[7][5] = { {"Sun"},{"Mon"},{"Tue"},{"Wed"},{"Thu"},{"Fri"},{"Sat"} };
do
{
cout << "enter the year and month. (exam: 2003 5) " << endl;
cin >> inputYear >> inputMonth;
if (leafYear(inputYear))
finishToDay[1] = 29;
else finishToDay[1] = 28;
cout << ("Input Month ");
cout << (display_year, "$4d", inputYear);
cout << ("Year");
cout << (" ");
cout << (display_month, "$2d", inputMonth);
cout << ("Month");
cout << ("is....") << endl;
cout << ("\t< ");

cout << (display_month, "$4d", inputYear);
cout << (" ");
if (inputMonth == 1) {
cout << "January";
};
if (inputMonth == 2) {
cout << "February";
};
if (inputMonth == 3) {
cout << "March";
};
if (inputMonth == 4) {
cout << "April";
};
if (inputMonth == 5) {
cout << "May";
};
if (inputMonth == 6) {
cout << "June";
};
if (inputMonth == 7) {
cout << "July";
};
if (inputMonth == 8) {
cout << "August";
};
if (inputMonth == 9) {
cout << "September";
};
if (inputMonth == 10) {
cout << "October";
};
if (inputMonth == 11) {
cout << "November";
};
if (inputMonth == 12) {
cout << "December";
};
cout << (" >");

cout << "\n============================\n";
if (inputMonth >= 1 && inputMonth <= 12)
{
for (i = 0; i < 7; i++)
cout << " " << dayofWeek[i];
cout << "\n----------------------------";
}

cout << endl;
leafCalendar(inputYear, inputMonth);
cout << ("\n----------------------------\n");
cout << "\n============================\n" << endl;
cout << "Repeat?(Y/N): ";
cin >> response;
} while (response != 'N' || response != 'n');

return 0;
}void leafCalendar(int inputYear, int inputMonth)
{
int StartToDay, LineBreak;

int TermToLine = (startToYear(inputYear) + startToMonth(inputYear, inputMonth)) % 7;
LineBreak = TermToLine;
for (StartToDay = 0; StartToDay < TermToLine; StartToDay++)
cout << "    ";

for (StartToDay = 1; StartToDay <= finishToDay[inputMonth - 1]; StartToDay++)
{
std::cout << "  " << std::setw(2) << std::setfill('0') << StartToDay;

if (LineBreak == 6) {
cout << "\n----------------------------" <<endl;
LineBreak = 0;
}
else
LineBreak++;

}
}

bool leafYear(int b)
{
if ((b % 4 == 0 && !(b % 100 == 0)) || (b % 400 == 0))
return true;
else {
return false;
}
}

int startToMonth(int inputYear, int inputMonth)
{
int CheckToLeaf = 0;
for (int i = 1; i < inputMonth; i++)
CheckToLeaf += finishToDay[i - 1] % 7;
if (inputMonth > 2 && leafYear(inputYear))
CheckToLeaf++;

return CheckToLeaf % 7;
}int startToYear(int inputYear)
{
int CheckToLeaf = 4;

for (int a = 1980; a >= inputYear; a--)
{
CheckToLeaf += 6;
if (leafYear(a))
CheckToLeaf += 6;
}    CheckToLeaf %= 7;

return CheckToLeaf;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector