【问题标题】:Issue with some simple logic and getting something to print C++ HouseWindowsLab一些简单的逻辑问题并打印 C++ HouseWindowsLab
【发布时间】:2019-02-12 09:20:08
【问题描述】:

请帮忙。这个简单的程序假设计算用户输入他们想要的每所房子的数量。乘以每所房子增加的窗户。并为备件总数应用 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 */

【问题讨论】:

  • 再看看备用窗口的格式说明符字符串。
  • 欢迎来到 Stack Overflow。请尽快阅读AboutHow to Ask 页面。请不要同时使用cc++ 标记问​​题——它们是完全不同的语言。您的标题提到了 C++;您的代码是 C。请注意 using fflush(stdin) — 在大多数平台上这不是好的做法,因为它会导致未定义的行为。

标签: c stdio


【解决方案1】:

你的逻辑完全没问题。这只是一个微小的语法错误。 在这一行:

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

&amp;d 应替换为 %d

我认为你只是忽略了它,因为其他部分都很完美。

【讨论】:

  • 尝试运行它,这是我运行它时发生的情况。 --- How many Montgomery Houses do you wish to build? 1 How many Kettering Houses do you wish to build? 1 How many Saxon Houses do you wish to build? 1 The total amount of windows for all houses are 47 windows. RUN SUCCESSFUL (total time: 1s) 它甚至没有承认其中一个打印语句哈哈。我也是新手,很抱歉格式化>_>
  • 格式化好友没有问题。但是你确定你没有注释掉printf 什么的吗?因为这是我得到的输出:`gcc version 4.6.3 How many Montgomery Houses do you want to build?他们有 20 个窗户。 1 您希望建造多少个凯特林住宅?他们有 15 个窗户。 1 你想建造多少撒克逊人的房子?他们有 12 个窗户。 1 需要的备用窗口 0 是窗口。所有房屋所需的窗户总数为 47 扇。'
  • 还有另一件事,尝试不使用fflush(stdin)。对于较小的程序来说,这不是必须的。它有时也会引起问题。
  • 我复制并粘贴了我的源代码,更改了一个东西,它又能正常工作了……这就是 &d 我已经工作了太久了。对编程完全陌生,我缓慢但肯定地按照自己的方式工作。它实际上变得非常有趣。感谢您的帮助!
  • 不客气。你能告诉我是什么导致了这个特定的printf 即使在更改&amp;d 之后也没有显示?只是想知道。
【解决方案2】:

您的问题是整数不能在点后有数字。例如: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。你可能想看看here

【讨论】:

  • 句法上非常有效的观点Doctor。但实际上,我猜不会。不是从编码的角度来看,但你不能真正拥有一小部分窗口,对吗?比如,0.53 个备用窗口,总共 53 个窗口。所以,从逻辑上讲,我觉得他最好使用整数。希望你不要冒犯,只是分享我的观点。
  • 正是我决定在这个上使用整数的原因。
【解决方案3】:

试试这个代码:

#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 */

实际上问题在于,当您尝试将整数乘以小数时,输出会转换为整数,因此我们必须明确指定该值应为浮点数。 希望有效。

【讨论】:

  • 我认为这会很有帮助,但是当我运行它时,我什至无法让 prinf("The total amount of windows... 出现。
  • 是的,问题出在您的&amp;d printf
【解决方案4】:

您的程序中存在多个问题。

让我开始一一指出。

考虑:scanf("\n%d", &amp;MontgomeryHouses);

为什么你在scanf() 中使用了'\n'?输入时无需在此处使用'\n'

我看到你在你的程序中使用了fflush(stdin); 5 次。停止在 C 程序中使用 fflush(stdin)fflush() 函数只能用于输出流。阅读Standard streams 了解更多信息。在 C 和 C++ 中使用 fflush(stdin)Undefined behavior。阅读这些问题的答案What does fflush(stdin) do in C programing?Using fflush(stdin) 了解更多信息。

另一个问题是你写了SpareWindows = TotalWindows * 0.01;。您想在SpareWindows 变量中使用浮点值,但该变量的数据类型被定义为int 类型。它应该被定义为float SpareWindows; 所以你必须使用'%f' 格式说明符来打印这个变量的值。

【讨论】:

  • 是的,我删除了所有的 fflush 并清理了它。如果它是一个浮点窗口,你会不会有一个奇怪的百分比窗口而不是一个?
  • @MatthewNickles:多么奇怪?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 2019-02-17
相关资源
最近更新 更多