微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

变量没有被评估并跳过 if 语句 c

如何解决变量没有被评估并跳过 if 语句 c

我有一个问题。当我尝试要求用户输入 yes 或 no 作为单个字符并使用括号设置 char 变量时,因为我在 if 语句中得到 Y 或 y 无效。如果我在没有括号的情况下执行此操作,我只会得到将在 if 语句中评估的 ascii 值。 以下代码将无法评估 recAnswer 值。当我在 printf 中输出值时,它会根据输入显示 recAnswer = "Y" 或 "y"。我试过 if(&recAnswer == "Y") 和 if(*recAnswer = "Y")

int main(int argc,char** argv)
{
  int numEntered;
  char recAnswer[1];

  while(numEntered < 1 || numEntered > 15) // Continually ask user to enter a number until the number entered is between 1 and 15 . 
  {
     printf("\nPlease enter a number between 1 and 15:");
     scanf(" %d",&numEntered);
  } 
  printf("\nDo you want to get the factorial value recursively? Enter Y or N:"); //Ask user if they want to get the answer recursively 
  scanf(" %c",&recAnswer);
     
if(recAnswer == "y" || recAnswer == "Y")
{
  printf("The recursive value of %d is %d",numEntered,recursive(numEntered)); //Print out recursive value
}   
else
{
  printf("The non-recursive value of %d is %d",nonRecursive(numEntered));  //Print out looped value
}
return 0;
}

感谢您对此进行调查

解决方法

对于初学者来说这个循环

  while(numEntered < 1 || numEntered > 15) // Continually ask user to enter a number until the number entered is between 1 and 15 . 
  {
     printf("\nPlease enter a number between 1 and 15:");
     scanf(" %d",&numEntered);
  } 

调用未定义的行为,因为变量 numEntered 未初始化。

int numEntered;

用while循环代替do-while循环

  do
  {
     numEntered = 0;
     printf("\nPlease enter a number between 1 and 15:");
     scanf(" %d",&numEntered);
  } while(numEntered < 1 || numEntered > 15); // Continually ask user to enter a number until the number entered is between 1 and 15 . 

第二,如果你要输入一个字符,那么声明一个包含一个元素的数组是没有意义的

char recAnswer[1];

(注意:此外,您对转换说明符 %c 使用了不正确的参数

scanf(" %c",&recAnswer);
            ^^^^^^^^^^^ 
  • 尾注)

声明一个 char 类型的对象并初始化它,例如使用常量“n”。

char recAnswer = 'n';

并按照以下方式更改 if 语句

if(recAnswer == 'y' || recAnswer == 'Y)

即使用字符整数常量而不是字符串文字。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。