循环不会终止

时间:2014-08-17 09:47:24

标签: c loops

我在下面有一个代码,询问用户是否要重试。如果用户输入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中添加一个空格,就像字符一样使用换行符,但它也不起作用。对不起,我很抱歉。

5 个答案:

答案 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){
....