Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bubik
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 21
#1

Программа выводит число и месяц по вводимому номеру порядкового дня: ошибка в программе - C++

15.05.2013, 22:47. Просмотров 454. Ответов 5
Метки нет (Все метки)

Программа выводит число и месяц по вводимому номеру порядкового дня. Этот код программы со структурой! Программа вылетает, после того, как введешь номер порядкового дня. Помогите понять, что за ошибка, и по возможности исправьте, пожалуйста!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "stdafx.h"
#include <iostream>
using namespace std; 
 
struct data {
int d;
int y;
int dy;
int *pm; 
int *pd;
};
 
static char daytab[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
 
void daymonth (data d)
 
{
int l;
char *p;
l = (d.y%4 == 0) && (d.y%100 != 0) || (d.y%400 == 0);
p=daytab[l];
while (d.dy>*++p)
d.dy-=*p;
*d.pm=p-*(daytab+l);
*d.pd=d.dy;
}
 
int _tmain()
 
{ data date;
cout<<"Vvedite poryadkoviy nomer chisla: \n";
cin>>date.d;
cout<<"Vvedite god: \n";
cin>>date.y;
 
daymonth(date);
cout<<endl<<"Day: "<<date.pd<<endl;
cout<<"Month: "<<date.pm<<endl;
cout<<"Year: "<<date.y<<endl<<endl;
return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2013, 22:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа выводит число и месяц по вводимому номеру порядкового дня: ошибка в программе (C++):

программа которая по номеру дня в году выводит число и месяц - C++
программа которая по номеру дня в году выводит число и месяц (например, 7-й день года — 7 января) что б при запуске появилось сообщение...

Вычислить число и месяц в невисокосном году по номеру дня - C++
Вычислить число и месяц в невисокосном году по номеру дня.

По номеру дня в году вывести число и месяц в общепринятой форме - C++
Составить программу, которая по номеру дня в году выводит число и месяц в общепринятой форме. Например, 33-ий день в году – 2 февраля.

По заданному году и порядковому номеру дня в году определять день недели и месяц этого дня - C++
Задачу не можем решить 3 людьми. ______________________________ Написать программу, которая бы позволяла по заданному году и...

Составить программу, которая в зависимости от порядкового номера дня месяца (1,2,.,12) выводит на экран врем - C++
Нужна помощь в разборе задачи на С++. Начал изучать язык и столкнулся с проблемой того, что не могу разобраться с действием оператора...

Составьте программу, печатающую по номеру дня недели (число от 1 до 7) название этого дня - C++
Составьте программу, печатающую по номеру дня недели (число от 1 до 7) название этого дня (понедельник, вторник и т. д.).

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.05.2013, 23:23 #2
учитесь пользоваться дебагером.
проблемный код:
C++
1
2
3
4
5
6
...
while (d.dy>*++p)
  d.dy-=*p;
*d.pm=p-*(daytab+l);
*d.pd=d.dy;
...
d.dy - неинициализировано, значит значение может быть любым, значит тело цикла может выполняться
неопределенное количество раз. но так как там только операции чтения, это не приводит к крашу. к
крашу приводят следующие после цикла строки.
d.pm - неинициализированный указатель.
*d.pm - разыменовывание неинициализированного указателя дает неопределенное поведение (например краш приложения.)
0
bubik
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 21
15.05.2013, 23:46  [ТС] #3
DU, Спасибо за пояснение, но я все равно не очень все понял...)
Не могли бы вы помочь исправить?
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.05.2013, 23:57 #4
неинициализированные переменные нужно явно проинициализировать какими-нибудь значениями. какими именно - вам виднее. я задумку программы не понял и не очень охото пытаться понять. так что постарайтесь как-нибудь сами.
1
zatochka
Сообщений: n/a
16.05.2013, 02:54 #5
Вам надо задать конкретные начальные значения переменных, и указать, на, что ссылается ваша переменная-указатель.) Только и всего. А какие они будут, это вы посмотрите сами относительно постановки задачи.
bubik
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 21
16.05.2013, 20:20  [ТС] #6
Все, разобрался)
Спасибо большое!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2013, 20:20
Привет! Вот еще темы с ответами:

Программа которая выводит имя (ошибка в программе) - C++
Написал программу: #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { int name; cout &lt;&lt;...

Вывести N-е полупростое число (программа постоянно выводит число 4; не могу понять в чем ошибка) - C++
ПОМОГИТЕ ПОЖАЛУЙСТА НАЙТИ ОШИБКУ! #include &lt;stdio.h&gt; #include &quot;fstream&quot; #include &lt;iostream&gt; #include &lt;vector&gt; using...

По заданной дате (число, месяц, год, например, 6, 5, 2012) вычислить номер дня в году - C++
2)По заданной дате (число, месяц, год, например, 6, 5, 2012) вычислить номер дня в году (от 1до 365 или 366, если год високосный).

Оформить в виде структуры год, месяц, число. Описать функцию для определения дня недели - C++
Оформить в виде структуры год, месяц, число. Описать функцию для определения дня недели, на который приходится заданная дата (учесть, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.05.2013, 20:20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru