Проблема с некоторой простой логикой и получением чего-то для печати C ++ HouseWindowsLab - PullRequest
0 голосов
/ 07 сентября 2018

Пожалуйста, помогите. Предполагается, что эта простая программа рассчитывает входные данные пользователей, сколько из каждого дома они хотят. Умножьте это окнами, которые добавляет каждый дом. И применить на 1% больше окон к общему количеству запасных частей. Почему не работает запчасть?

/*************************************
* PROGRAM: WindowCalculator
* AUTHOR: Matthew Nickles
* DATE: 9/6/2018
* NOTES: This is for educational purposes, the program calculates
* how many windows for each house plan a city builder would get.
**************************************/

/* PREPROCESSOR COMMANDS */
#include <stdio.h>


/* MAIN PROCESSING CONTROL */
int main()
{
/* VARIABLE DECLARATIONS */
int MontgomeryHouses; /*20 Windows per a house*/
int KetteringHouses; /*15 Windows per a house*/
int SaxonHouses; /*12 Windows per a house*/
int TotalWindows; /*Total calculation of all windows*/
int SpareWindows; /*How many spare windows if you wanted 1% of total*/ 

/* WINDOWS PER HOUSE ALGORITHM */
printf("\n How many Montgomery Houses do you wish to build? They have 20             windows. ");
scanf("\n%d", &MontgomeryHouses);
fflush(stdin);

printf("\n How many Kettering Houses do you wish to build? They have 15 windows. ");
scanf("\n%d", &KetteringHouses);
fflush(stdin);

printf("\n How many Saxon Houses do you wish to build? They have 12 windows. ");
scanf("\n%d", &SaxonHouses);
fflush(stdin);

/* CALCULATE TOTAL WINDOWS*/
TotalWindows = (MontgomeryHouses * 20) + (KetteringHouses * 15)
        + (SaxonHouses * 12);
SpareWindows = TotalWindows * 0.01;
/* DISPLAY OUTPUT*/
printf("The spare windows needed &d are windows.\n",SpareWindows);
fflush(stdin);  
printf("\nThe total amount of windows needed for all houses are %d windows.\n",TotalWindows);
fflush(stdin);



return 0;
}
/* END OF PROGRAM */

Ответы [ 4 ]

0 голосов
/ 07 сентября 2018

В вашей программе несколько проблем.

Позвольте мне начать указывать на них одного за другим.

Рассмотрим: scanf("\n%d", &MontgomeryHouses);

Почему вы использовали '\n' в scanf()? Нет необходимости использовать '\n' здесь, когда вы принимаете ввод.

Я вижу, что вы использовали fflush(stdin); 5 раз в своей программе. Прекратите использовать fflush(stdin) в своих программах на Си. fflush() функция должна использоваться только для выходного потока. Прочитайте Стандартные потоки , чтобы узнать больше информации об этом. Использование fflush(stdin) - это Неопределенное поведение в обоих C и C ++. Прочитайте ответы на эти вопросы Что делает fflush (stdin) в программировании на Си? & Использование fflush (stdin) для получения дополнительной информации.

Другая проблема в том, что вы написали SpareWindows = TotalWindows * 0.01;. Вы хотите использовать значение с плавающей запятой в переменной SpareWindows, но тип данных этой переменной определен как тип int. Он должен быть определен как float SpareWindows;, поэтому вам придется использовать спецификатор формата '%f', чтобы вывести значение этой переменной.

0 голосов
/ 07 сентября 2018

Ваша проблема в том, что у целых не должно быть чисел после точки.Например: SpareWindows = 50.43, но поскольку вы объявили его как int, оно будет усечено до 50.Возможно, вы захотите использовать floats вместо этого, например:

/* VARIABLE DECLARATIONS */
int MontgomeryHouses; /*20 Windows per a house*/
int KetteringHouses; /*15 Windows per a house*/
int SaxonHouses; /*12 Windows per a house*/
int TotalWindows; /*Total calculation of all windows*/
float SpareWindows; /*How many spare windows if you wanted 1% of total*/ 

Так как общее количество окон всегда может быть просто "полным" числом, прекрасно объявить их как ints.Но при переходе к проценту, например SpareWindows, вы должны использовать floats.Возможно, вы захотите взглянуть здесь

0 голосов
/ 07 сентября 2018

Попробуйте этот код:

#include <stdio.h>


/* MAIN PROCESSING CONTROL */
int main()
{
/* VARIABLE DECLARATIONS */
int MontgomeryHouses; /*20 Windows per a house*/
int KetteringHouses; /*15 Windows per a house*/
int SaxonHouses; /*12 Windows per a house*/
int TotalWindows; /*Total calculation of all windows*/
float SpareWindows; /*How many spare windows if you wanted 1% of total*/ 

/* WINDOWS PER HOUSE ALGORITHM */
printf("\n How many Montgomery Houses do you wish to build? They have 20             windows. ");
scanf("\n%d", &MontgomeryHouses);
fflush(stdin);

printf("\n How many Kettering Houses do you wish to build? They have 15 windows. ");
scanf("\n%d", &KetteringHouses);
fflush(stdin);

printf("\n How many Saxon Houses do you wish to build? They have 12 windows. ");
scanf("\n%d", &SaxonHouses);
fflush(stdin);

/* CALCULATE TOTAL WINDOWS*/
TotalWindows = (MontgomeryHouses * 20) + (KetteringHouses * 15)
        + (SaxonHouses * 12);
SpareWindows = (float)TotalWindows * 0.01; //Used Explicit type conversion to float
/* DISPLAY OUTPUT*/
printf("The spare windows needed %f are windows.\n",SpareWindows);
fflush(stdin);  
printf("\nThe total amount of windows needed for all houses are %d windows.\n",TotalWindows);
fflush(stdin);



return 0;
}
/* END OF PROGRAM */

Здесь на самом деле проблема в том, что когда вы пытаетесь умножить целое число на десятичное число, выходные данные преобразуются в целое число, поэтому мы должны явно указать, что значение должно быть числом с плавающей запятой. Надеюсь, что это сработало.

0 голосов
/ 07 сентября 2018

Ваша логика полностью в порядке. Это просто маленькая синтаксическая ошибка. В этой строке:

printf("The spare windows needed &d are windows.\n",SpareWindows);

&d следует заменить на %d.

Я думаю, вы просто упустили это из виду, потому что остальные части совершенны.

...