gpt4 book ai didi

c - 使用 boolean 标志检测输入错误,C

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:53 25 4
gpt4 key购买 nike

我正在尝试创建一个 boolean 标志,当输入无效的输入代码时,它会输出一条错误消息。这是一个类作业,我刚刚学习 C,所以请原谅格式,如果可以改进请通知我。如果输入或输出变量不正确,我的代码会成功执行所有操作,但会输出错误消息。我相信这是代码的 boolean 检查部分的错误。诊断会很好。

此代码将:

  • 请求和来源货币、目标货币和来源金额
  • 如果输入变量不正确,则输出目标货币金额或错误消息

参数:

  • 来源和目的地货币必须是加元 ($)、日元 (Y) 或欧元 (E)
  • 必须使用 boolean 标志

提前致谢。

# include <stdio.h>

int main() {

char $ = $;
char Y = Y;
char E = E;

char in_currency, out_currency;

char flag = 1;
char new_line;

float in_value;
float out_value;

//Calculation variables

printf("Enter the source currency: ");
scanf("%c%c", &in_currency, &new_line);

printf("Enter the destination currency: ");
scanf("%c%c", &out_currency, &new_line);

if ( ( in_currency || out_currency ) != ( '$' || 'Y' || 'E' ) )
flag = 0;

printf("Enter the value: ");
scanf("%f%c", &in_value, &new_line);

//Calculations

if (flag) {
printf("%c%.2f = %c%.2f \n", in_currency, in_value, out_currency, out_value);
}
else {
printf("There was an error with the input. \n");
}

return 0;
}

最佳答案

感谢@JonathanLeffler 的精彩评论。

我相信这可能是由于您的 if 语句的逻辑顺序所致

 if ( ( in_currency || out_currency ) != ( '$' || 'Y' || 'E' ) )
flag = 0;

你打算做的如下

 if ( 
(in_currency == '$' || in_currency == 'Y' || in_currency == 'E')
||
( out_currency == '$' || out_currency == 'Y' || out_currency == 'E')
) flag = 0;

这是由于您的原始线路的评估方式所致。 ( in_currency || out_currency )

注意 C++ standard (第 6.8.4.1 节)指出

the substatement is executed if the expression compares unequal to 0.

和打字一样 ( in_currency != 0 || out_currency =! 0)请注意,测试单个值将始终针对非零值进行测试,有时被视为“真实”值。

简而言之,if 语句的第一部分将始终返回 true,因为两个测试(非零字符值)都等于 true。

可以将其视为(在中不为零 中不为零),因为两个值都不为零,两个测试等同变为真,成为 (true OR true) - 显然这反过来也是真的。

if 语句的后半部分略有不同

 ( '$' || 'Y' || 'E' ) 

这也将等同于 ( true OR true Or True ),因此始终等同于 true 例如:

( '$' != 0 || 'Y' != 0 || 'E' != 0) 

最后,这分解为您的代码阅读:

 if ((in_currency != 0 || out_currency =! 0) != ( '$' != 0 || 'Y' != 0 || 'E' != 0)) 

if ((true || true) != ( true || true || true))
if ((true) != (true))

显然,这将总是等同于 false,因为 true 永远不会不等于 true(除非一些通用常量发生变化 ;-)

结果是你的标志总是假的。 - 始终

我给你的替换它的行,而是分别测试每个可能的案例场景并比较结果。

你可以这样理解

  if 
in_currency **is equal to** '$' *or*
in_currency **is equal to** 'Y' *or*
in_currency **is equal to** 'E'
or
out_currency **is equal to** '$' *or*
out_currency **is equal to** 'Y' *or*
out_currency **is equal to** 'E'
then flag = 0;

[编辑]

用户 Turboc 在下面回答说您可能希望在这两个语句之间使用 &&(and)而不是 or。(请原谅我将此信息放在这里,但是我还不能对答案发表评论)

这取决于您打算如何评估您的声明 - 如果您希望标志等于 false (0),如果货币是上述任何一种,则对于输出或输入,则情况并非如此)。

但是,如果您希望声明在货币是上述之一时为真,您可以使用以下内容

  if 
in_currency **is equal to** '$' *or*
in_currency **is equal to** 'Y' *or*
in_currency **is equal to** 'E'
and
out_currency **is equal to** '$' *or*
out_currency **is equal to** 'Y' *or*
out_currency **is equal to** 'E'
then flag = 1;

但是,如果是这种情况,您可能希望决定哪种答案对您的问题更有效。

关于c - 使用 boolean 标志检测输入错误,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24718806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com