2017-02-21 18 views
0

Я учу C и Im, пишу простую программу, в которой вы вводите количество дней, и в ней говорится, сколько часов в эти дни. Например, вы вводите 2 дня, и он говорит, что есть 48 часов. Ошибок нет, но конечный результат не очень хорош. Вот мой код, и мой результат Код:C - Сколько часов занимает определенное количество дней?

int day, hour; 
hour= 24 * day; 

printf("Find out how many hours are in days.\n"); 
printf("Enter number of days. Days = "); 
scanf("%d", &day); 
printf("%d days has %d hours.\n", day, hour); 
return (EXIT_SUCCESS);` 

Вот результат в консоли.

Find out how many hours are in days. 
Enter number of days. Days = 1 
1 days has 677268864 hours. 
+2

Почему downvote? Здесь есть код, а фактическое и ожидаемое поведение задокументировано. – Bathsheba

+0

@ Батшеба - я не спустил вниз, но некоторые пользователи на SO чувствуют, что вопросы, которые заставляют идти «хорошо, дух!» здесь не должно быть. – StoryTeller

+2

Но некоторые языки позволяют это, и вопрос хорошо написан. – Bathsheba

ответ

2

Вы должны оценить hour раз day известно. Вы не можете планировать такую ​​оценку на C, если вы получите мой смысл. (Вы можете, интересно, на C++, используя актеров.)

В настоящее время вы читаете неинициализированную переменную. Поведение при этом не определено.

+1

Получил мой голос, так как теперь я переработал реалистичные рамки для актеров и получил некоторые материалы для чтения. – StoryTeller

+1

Взгляните на усиление духа и усиление Феникса! – Bathsheba

+1

сделаю. И я надеюсь, что ваша кошка будет хорошо и учтена со всеми UB на SO в эти дни! – StoryTeller

2
int day, hour; 
hour= 24 * day; 

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

Переместите это задание после того, как вы получили от пользователя day.

2

Подумайте о том, что вы делаете:

int day, hour; 

day и hour оба неинициализированным.

hour= 24 * day; 

Тогда вы немедленно вычисляете hour! Но day не имеет никакого значимого значения.

На самом деле ...

scanf("%d", &day); 

... вы заполняете day после расчета.


Перемещение scanf перед расчетом, так что day будет инициализирован при выполнении умножения - ваш код будет работать правильно, то.

2

почему вы делаете это:

hour= 24 * day; 

, прежде чем пользователь дает ввод ??

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

это должно быть что-то вроде

int day = 0; 
int hour = 0; 

printf("Find out how many hours are in days.\n"); 
printf("Enter number of days. Days = "); 
scanf("%d", &day); 
hour= 24 * day; 
printf("%d days has %d hours.\n", day, hour); 
return (EXIT_SUCCESS); 
+0

Не знал, что я не должен этого делать до ввода пользователем. Я просто подумал, что он определит часы и автоматически разобратся. – BrS

+0

вы можете, но потом получать мусор на всех тех, которые не являются init vars .... –

+2

@brs Похоже, вы программист на C++. – Bathsheba

0

Переменная day еще не заполнена; он, вероятно, содержит нежелательные данные.Чтобы исправить это, переместите int hours = day * 24 после scanf("%d",&day);, таким образом, переменная day действительно будет иметь значение, отсканированное.

 Смежные вопросы

  • Нет связанных вопросов^_^