我可以使用 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
我是新手,我想我的问题有一个简单的解决方案。我的第一个公式完全符合我的意愿。如果用户输入与 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