我可以使用 Char 而不是 Double 来创建 while 循环吗?

Can I make a while loop using Char, instead of Double?

我是新手,我想我的问题有一个简单的解决方案。我的第一个公式完全符合我的意愿。如果用户输入与 dogage99 匹配,则它会打印“正确”。我想做类似的事情,但使用文字而不是数字。我已经将 double 转换为 char,并相应地调整了公式。

问题是,第二个公式没有像我预期的那样工作。当用户输入匹配 dogname1 时,它不会打印“正确”,它只是不断地要求“输入狗名”。

我该怎么做才能解决我的问题?

int main() {

double guess99;
double dogage99 = 3;

while (guess99 != dogage99) {
    printf ("enter dog age:");
    scanf ("%lf", &guess99);
}
printf ("Correct\n");



char guess1;
char dogname1= "spot";

while (guess1 != dogname1) {
    printf ("enter dog name:");
    scanf ("%s", &dogname1);
}
printf ("Correct\n");

我确定编译器正在向您抱怨

char dogname = "spot";

在 c 中,类型 char 表示单个字符而不是字符串。 C 中的字符串是一系列字符,后跟一个设置为 [=14=] 的字符。如果你这样做,编译器会为你设置

char *dogname="spot";

它将分配 5 个字节,将 s,p,o,t,\0 加载到这些字节中,并将 dogname 变量设置为指向第一个字符。

如果你想比较字符串,你必须使用名为 strcmp 的 c 库函数 - https://man7.org/linux/man-pages/man3/strcmp.3.html.

此外,您需要一个字符数组来接收输入。我们只是说我们想要 50 个字符。还必须告诉 scanf 不允许超过 50 个字符。请注意,我要求 51 个字符的数组以允许必须始终存在的尾随 0。

所以你的循环变成了

char  guess1[51];
char *dogname1= "spot";

while (guess1 != dogname1) {
    printf ("enter dog name:");
    scanf ("%50s", guess1);
}
printf ("Correct\n");

注意你必须#include string.h

看看这个 https://www.tutorialspoint.com/cprogramming/c_strings.htm

首先是行 char dogname1= "spot"; 应更正为 char *dogname1= "spot"; 这样,char 数组 dogname1 将被正确初始化为字符数组,并将在数组末尾包含空终止符“\0”。

您还必须确保猜测有足够的内存安全,因此您必须创建足够字节的数组(例如 256),或者动态分配内存。在这个例子中,我首先将 char guess1; 更改为 char guess1[256];

知道 guess1 有足够的内存和空终止符,我们接下来可以将 while 循环重写为

while(strcmp(guess1, dogname1)) { ... }

strcmp() 标准库函数 returns 0 当且仅当两个字符数组按字典顺序匹配,这也是我们要跳出循环的时候。同样重要的是要知道,在使用这个确切的函数时,您必须确保两个数组都有空终止符。如果不能保证,那就用strncmp().

有关所有不同比较函数及其含义的参考:https://www.ibm.com/docs/en/aix/7.1?topic=s-strcmp-strncmp-strcasecmp-strcasecmp-l-strncasecmp-strncasecmp-l-strcoll-strcoll-l-subroutine