C:结合 while 和 if 语句
Posted
技术标签:
【中文标题】C:结合 while 和 if 语句【英文标题】:C: Combining while and if statements 【发布时间】:2019-04-08 07:54:54 【问题描述】:我正在尝试用 C 编写一个程序,该程序根据用户提供的输入调用两个函数之一。
如果用户输入“1”,程序应该说“你选择了 A”,如果用户输入“2”,程序应该说“你选择了 B”。我遇到的问题是,无论用户输入 1 还是 2,都会返回消息“您选择 A”(请参见屏幕截图)。
Selection 1
Selection 2
这是我的代码:
include <stdio.h>
void celsiusFahrenheit()
printf("You chose A");
void fahrenheitCelsius()
printf("You chose B");
int main()
int selection;
printf("Please enter '1' to convert celsius to fahrenheit, or enter '2' to convert fahrenheit to celsius: ");
scanf_s("%d", &selection);
while (selection < 1 || selection > 2)
printf("Please enter a valid entry of either 1 or 2: ");
scanf_s("%d", &selection);
if (selection = 1)
celsiusFahrenheit();
else
fahrenheitCelsius();
如果您能提供任何帮助,我将不胜感激!
【问题讨论】:
selection = 1
是赋值而不是相等比较 (==
)。如果你在编译时使用了一些防御性标志(如 gcc/clang 的 -Wall
),你的编译器会警告你。
将if (selection = 1)
更改为if (selection == 1)
。这是一个常见的错误。增加编译器警告,并可能将代码设置为if (1 == selection)
,以在键入错误时产生错误。
@PSkocik Clang 有 -Weverything
。
谢谢,伙计们。这真的很有帮助!
@FiddlingBits: -Weverything
警告太多——我不认为它可用于生产代码,因为它会抱怨,例如,如果您使用 #define _XOPEN_SOURCE 700
启用 POSIX 功能,因为名称保留用于实现。是的,我知道它是;这就是我使用它的原因!它必须经过调整才能真正与许多-Wno-xyz
选项一起使用。我使用-Weverything -Wno-padded -Wno-vla -Wno-reserved-id-macro -Wno-documentation-unknown-command
让事情对我来说足够健康。我也使用-Werror
,所以我不会在编译时出现任何警告。
【参考方案1】:
您将一个整数常量分配给一个整数 (selection = 1
) 并检查它的真值,它将始终为真。
正如 cmets 中已经指出的那样,您可以使用 -Wall
选项,它会警告您,
warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (selection = 1)
~~~~~~~~~~^~~
或者像这样改变if
条件:
if (1 == selection)
如果您在上述语句中犯了同样的错误(赋值),即使没有-Wall
选项,编译器也会产生错误,您可以在程序中避免这个错误。
【讨论】:
以上是关于C:结合 while 和 if 语句的主要内容,如果未能解决你的问题,请参考以下文章
结合“if”和“while”,当“if”条件满足时如何跳出所有嵌套循环?