【发布时间】:2019-04-30 05:38:13
【问题描述】:
#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 或任何其他值,循环也会继续运行。请帮忙。
【问题讨论】:
-
(val!='a' || val!='o') 总是正确的
-
val != 'a' || val != 'o'。好的,让我们测试一下val = 'a'。当val = 'a'时,则val != 'a'为假,val != 'o'为真。||像 OR 一样工作,所以false || true是true。所以循环会运行。 -
与你的主要问题相切——你应该将函数声明放在
main()之外,你应该把变量定义放在main()中。尽可能避免使用全局变量。函数可全局访问;在函数中声明它们是毫无意义的。 -
不要在
getval函数中使用递归,使用循环。否则,您最终可能会遭到拒绝服务攻击,有人可能会耗尽堆栈。 -
而且不要使用全局变量!而是让函数 return 值。
标签: c