C 语言:是否可以将"yes"放入 do while 循环中?



正在放入"是";在do-while循环语句中,因为我不知道怎么做。它不起作用。

#include <stdio.h>
int main ()
{
char choice [3];
do 
{

printf ("Do you want to try again? ");
scanf ("%s", &choice);

} while (choice == "yes");
}
字符串"yes"包含4个字符,包括终止的零字符''。因此,将接受字符串的字符数组应至少用4个元素声明
char choice[4];

scanf的呼叫中

scanf ("%s", &choice);

第二个参数的类型为char( * )[3](如果您将如上所示更新数组声明,则为char ( * )[4](,而不是char *

你至少应该像一样写作

scanf ("%3s", choice);

在do while语句的条件下

while (choice == "yes");

由于数组到其第一元素的指针的隐式转换,比较了两个指针。因此,由于数组choice和字符串文字"yes"占用不同的内存范围,因此该条件的计算结果总是为false。

例如,您需要使用标题<string.h>中声明的标准C函数strcmp作为

#include <string.h>
//...
} while ( strcmp( choice, "yes" ) == 0 );

可以执行您正在尝试的操作(循环直到键入"yes"(,但您的代码有很多问题。首先,您的选择缓冲区太小;它不能容纳字符串"yes"所需的四个字节及其终止的null字符(如果输入两个以上的字符,则会溢出它(。条件选择==yes不是与缓冲区进行比较,而是将选择的地址与指向字符串文字的指针进行比较(打开编译器警告(。使用strcmp((或类似方法比较字符串。

最新更新