gpt4 book ai didi

c - 为什么即使条件为假,我的循环仍在运行?

转载 作者:行者123 更新时间:2023-11-30 18:45:00 24 4
gpt4 key购买 nike

#include<stdio.h>
int no,tr_no;
char val;
int main (void) {
void getno(void);
void getval(void);
void printall(int number);
void printonly(int number);
void print(void);

getval();
getno();

if (val=='a')
printall(no);

if (val=='o')
printonly(no);

return 0;
}

void getval(void) {
printf("enter o for only 1 triangular number\n");
printf("enter a for all the triangular number from 1 to that number\n");

scanf(" %c",&val);

while (val!='a' || val!='o') {
printf("enter valid char\n");
getval();
}
}

while 循环不应在 val==a 时运行或val==o ,但仍然如此。不仅 while 循环不起作用, if 语句也不起作用。但是,当只有 1 个条件时,即

if (val!=a)
getval();

它有效!!

void getno(void)
{
printf("enter number for which tr no needs to be found\n");
scanf("%i",&no);
}
void printall(int number)
{
int i;
tr_no=0;
void print(void);
for (i=1;i<=number;i++)
{
tr_no=tr_no+i;
printf("The %ith tr_no is\n",i);
print();
}
}
void printonly(int number)
{
void print(void);
tr_no=0;
int i;
for (i=1;i<=number;i++)
{
tr_no=tr_no+i;
}
print();
}
void print(void)
{
printf("%i\n",tr_no);
}

在 getval 函数中,即使输入 val 的值是 a 或 o 或任何其他值,循环也会继续运行。请帮忙。

最佳答案

您的条件是val!='a' || val!='o'。让我们看几个例子:

  • 假定的val == 'b'。那么 val != 'a' 为 true,val != 'o' 为 true,将它们进行或运算为 true || true,这是真的。
  • 假设val == 'a'。那么 val != 'a' 为 false,但 val != 'o' 为 true,因此将它们组合在一起是 false || true,这是真的。
  • 假设val == 'o'。这几乎与前面的情况相同; 真|| false 为 true。

问题在于反转整个条件与反转每个组件不同。如果您希望循环运行直到 val == 'a' 或直到 val == 'o',您需要相当于 while (!(val == 'a' || val == 'o'))。在这种情况下,de Morgan's law表示您需要将 == 更改为 !=并且|| 更改为&&。您希望它在 val 不是 'a' val 不是 ' 时循环o'

关于c - 为什么即使条件为假,我的循环仍在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55914548/

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