我想执行else语句(True或Nothing)中的输出,但是由于某种原因,我的while循环仅首先执行if语句或else if。我知道我正在使用无限循环,但我想通过使用else语句中两个语句之一中的break函数来离开它。我想要执行else语句,所以,他们有头发吗? -> Y->梅西? -> Y->是。还是他们有头发-> N->贝克汉姆? -> Y->是。还是他们有头发-> N-> Beckham-> N->什么都没有。还是他们有头发-> T-> Messi-> N->什么都没有
#include <stdio.h>
#include <strings.h>
int random(char z[]);
int main() {
char *x ="Do they have hair";
char *yes = "Messi";
char *no = "Beckham";
char *u ="Nope";
do {
char *currents = x;
while (1) {
if (random(currents)) {
if (yes) {
currents = yes;
printf("First check\n");
} else {
printf("True: %s\n", yes);
break;
}
} else if (no) {
currents = no;
printf("False\n");
} else {
printf("Nothing\n");
break;
}
}
}while(random("Run Again?"));
return 0;
}
int random(char z[])
{
char a[3];
printf("%s: %s",z,a);
fgets(a, 3,stdin);
return a[0] == 'y';
}
答案 0 :(得分:1)
您的while
循环不会退出,因为if (yes)
和if(no)
始终是true
。
yes
是Messi
。所有非零值都称为true
。
因此,您的yes
值始终具有保存Messi
的内存地址。而且总是非零。
no
也相同。 no
始终指向Beckham
。因此,它是true
因此,我为您的逻辑修改了代码。请参考以下代码:
#include <string.h>
#include <iostream>
#include <stdio.h>
int random(char z[]);
int main() {
char x[] = "Do they have hair";
char again[] = "run again";
char yes[] = "Messi";
char no[] = "Beckham";
char u[] = "Nope";
do {
if (random(x)) {
if (random(yes)) printf("True!\n");
else printf("Nothing!\n");
}
else {
if (random(no)) printf("True!\n");
else printf("Nothing!\n");
}
} while (random(again));
return 0;
}
int random(char z[])
{
char a[3];
printf("%s?:", z);
fgets(a, 3, stdin);
return a[0] == 'y';
}