#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();
}
}
当val==a
或val==o
时,while循环不应运行,但仍会运行。不仅是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或任何其他值,循环也将继续运行。请帮忙。
答案 0 :(得分:2)
您的条件是val!='a' || val!='o'
。让我们在这里看几个例子:
val == 'b'
。那么val != 'a'
为真,val != 'o'
为真,并且将它们在一起或为true || true
,这是真的。val == 'a'
。那么val != 'a'
为假,而val != 'o'
为真,因此将它们在一起或为false || true
,这是真的。val == 'o'
。这几乎等同于先前的情况; true || false
是正确的。问题在于,反转整个条件与反转每个组件并不相同。如果希望循环运行到val == 'a'
或直到val == 'o'
,则需要与while (! (val == 'a' || val == 'o'))
等效的内容。在这种情况下,de Morgan's law表示您需要将==
更改为!=
, 并将||
更改为{{1 }}。您希望它在&&
不是val
并且 'a'
不是val
的情况下循环。
答案 1 :(得分:0)
在循环条件中使用&&
while (val!='a' && val!='o')
否则这是一个无穷循环,因为您的循环条件((val!='a' || val!='o')
)始终为真。