提问人:gil.exe_ 提问时间:11/10/2023 更新时间:11/10/2023 访问量:61
努力结束循环比较字符串
Struggling to end loop comparing strings
问:
我正在尝试创建一个 C 程序,将字符串输入与 3 个有效字符串进行比较,如果输入与任何字符串不同,那么它将重新循环。即使用户输入有效,我也无法使循环闭合
char HB[3] = "HB";
char FB[3] = "FB";
char BB[3] = "BB";
int x = strcmp(boardType, FB);
int y = strcmp(boardType, BB);
int z = strcmp(boardType, HB);
do {
fflush(stdin);
printf("Which board type would you like? Full Board(FB), Half Board(HB) or Bed & Breakfast(BB)\n");
scanf("%s", &boardType);
printf("%s", boardType);
} while (x != 0 || y != 0 || z != 0);
即使输入 HB、BB 或 FB,它也能保持循环运行
答:
1赞
John Doe
11/10/2023
#1
您永远不会更改 的值,并且在循环中,对于从用户读取的新值,从未进行过比较。x
y
z
此外,您需要使用 而不是 ,否则即使您为其中一种板类型输入了正确的值,其他板类型也会有所不同,因此检查无论如何都会循环。&&
||
or
尝试在循环内部移动(我假设它是在顶部的某个地方声明的,为了简洁起见,您省略了它)strcmp
boardType
char HB[3] = "HB";
char FB[3] = "FB";
char BB[3] = "BB";
int x = 1;
int y = 1;
int z = 1;
do {
fflush(stdin);
printf("Which board type would you like? Full Board(FB), Half Board(HB) or Bed & Breakfast(BB)\n");
scanf("%s", &boardType);
printf("%s", boardType);
x = strcmp(boardType, FB);
y = strcmp(boardType, BB);
z = strcmp(boardType, HB);
} while (x != 0 && y != 0 && z != 0);
如果比较是在循环之外进行的,则变量将永远不会改变,因此无论用户输入什么,它们的值始终等于他们第一次运行循环时的值。
评论
0赞
gil.exe_
11/10/2023
我尝试了这段代码,但即使输入了应该有效的输入,它仍然会循环。
0赞
John Doe
11/10/2023
@gil.exe_ 你改成了吗?使用将始终导致循环再次执行,因为三个检查中的一个将始终导致与 0 不同||
&&
or
strcmp
0赞
Jabberwocky
11/10/2023
@gil.exe_此代码在这里工作正常。请举例说明输入和预期输出与实际输出。
1赞
John Doe
11/10/2023
@Jabberwocky公平地说,即使我想到了,我也忘记了在代码中更改它,所以复制和粘贴它确实在编辑之前遇到了同样的问题||
&&
评论