我在下面有一个代码,询问用户是否要重试。如果用户输入no,程序将终止。我的代码不起作用,即使输入是" no"
,循环仍然运行#include<stdio.h>
int main()
{
char x[5];
do
{
printf("would you like to try again?");
scanf("%s",&x);
}
while(x != "no");
getch(); return 0;
}
我尝试在scanf中添加一个空格,就像字符一样使用换行符,但它也不起作用。对不起,我很抱歉。
答案 0 :(得分:1)
您应该使用strcmp()
来比较字符串。
do { ... } while (strcmp(x, "no") != 0);
答案 1 :(得分:1)
其他答案和评论已经解决了比较char数组的问题。输入“是的,我想再试一次”,输入5个元素的阵列还有另外一个问题。使用%4s将限制scanf。另一个选择是使用fgets ( x, sizeof ( x), stdin);
fgets将包含换行符,因此比较将是“no \ n”而不是“no”。
#include<stdio.h>
#include<string.h>
int main()
{
char x[5];
do
{
printf("would you like to try again?");
scanf("%4s",x); // %4s prevent overrun. x is array, no need for &
}
while( strcmp ( x, "no") != 0);
getchar();
return 0;
}
答案 2 :(得分:0)
您无法使用!=
比较两个字符串,因为x
的值实际上是字符串的内存地址。
您必须包含string.h
并使用strcmp()
功能。 (看看the doc。)
答案 3 :(得分:0)
x
仅代表数组的基址,而"no"
仅代表文字字符串[no\0]
的地址。所以x != "no"
正在比较两个始终为假的地址。
您应该在标准C lib中使用strcmp
。
答案 4 :(得分:0)
你的问题是while
循环的条件。 x
是一个包含字符的数组。使用x!="no"
,您正在检查数组的基址(当您删除括号时更具体,编译器将其转换为指向单元x
处的数组x[0,0]
的指针})。
因此,问题的最佳解决方案和最简单的解决方案是使用strcmp
函数。 strcmp
代表字符串比较。此函数使用ascii代码比较两个字符串之间的字符。只有当两个字符串相同时,strcmp
函数才返回零。所以在你的情况下,你应该使用类似的东西:
while(strcmp(x,"no")!=0){
....