努力结束循环比较字符串

Struggling to end loop comparing strings

提问人:gil.exe_ 提问时间:11/10/2023 更新时间:11/10/2023 访问量:61

问:

我正在尝试创建一个 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,它也能保持循环运行

c string scanf do-while strcmp

评论


答:

1赞 John Doe 11/10/2023 #1

您永远不会更改 的值,并且在循环中,对于从用户读取的新值,从未进行过比较。xyz

此外,您需要使用 而不是 ,否则即使您为其中一种板类型输入了正确的值,其他板类型也会有所不同,因此检查无论如何都会循环。&&||or

尝试在循环内部移动(我假设它是在顶部的某个地方声明的,为了简洁起见,您省略了它)strcmpboardType

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 不同||&&orstrcmp
0赞 Jabberwocky 11/10/2023
@gil.exe_此代码在这里工作正常。请举例说明输入和预期输出与实际输出。
1赞 John Doe 11/10/2023
@Jabberwocky公平地说,即使我想到了,我也忘记了在代码中更改它,所以复制和粘贴它确实在编辑之前遇到了同样的问题||&&