为什么“while”循环在满足条件时不会结束?

时间:2015-04-28 13:40:07

标签: c

我有一个明显容易的问题,但我无法得到我做错了什么。    我有一个代码可以在控制台中测试60个字符的输入文本,如果在该文本中出现“恐怖”字样,它将提示消息“可疑文本”,当该字出现时,它将显示“没有任何可疑” 。    进入“模式”的文本应在输入单词“完成”时结束。这似乎是我的问题,因为我的while循环只是不想结束。

任何提示?

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

int start_with (char *sir1, char *sir2)
{
    int i,j,k;
    int len_sir2=strlen(sir2);
    char sir3[60]="";
    for (i=0;i<=len_sir2;i++)
    {
        sir3[i]=sir1[i];
    }
    k=(strcmp(sir2,sir3)) ? 0:1;
    return k;
}

int main()
{
    char *txt1;
    char sir1[60]="", sir2[60]="terorist", sir_test[60]="done";
    int i,j,lensir1, contor=0,buf_de_la=0, buf_la;  

    while (sir1!=sir_test)
    {
        printf("Enter desired text and press ENTER \n");
        gets(sir1);
        printf("\n");
        buf_la=strlen(sir1);
        char *txt1="Nothing suspect";
        while (buf_de_la<buf_la-7)
        {
            char sirbuf[60]="";
            j=buf_de_la;
            for (i=0;i<=7;i++)
            {
                sirbuf[i]=sir1[j];
                j=j+1;
            }

            if (start_with(sirbuf,sir2)==1)
            {
                txt1="SUSPECT text entered!";
                break;
            }

            buf_de_la=buf_de_la+1;

        }
        printf("%s\n",txt1);
        getch();
        system("cls");
    }

    return 0;


}

3 个答案:

答案 0 :(得分:10)

您应该使用strcmp来比较C风格的字符串,就像这样

while (strcmp(sir1, sir_test) != 0)

这是因为当你执行sir1!=sir_test时,你实际测试的是两个字符数组是否都指向内存中的相同地址,这是不正确的,因为它们是位于两个不同的两个不同的字符数组内存地址。

相反,你想要做的是比较每个变量内存空间中包含的字符,以及strcmp的作用:它逐个字符地比较,直到找到空终止字符。

答案 1 :(得分:5)

而不是while (sir1!=sir_test),请尝试:while (strcmp(sir1,sir_test))strcmpstrcmpi等是用于字符串比较的正确函数。它们在string.h头文件下声明。

答案 2 :(得分:3)

问题在于您的比较while (sir1!=sir_test)这是错误的。它实际上比较了两个字符串的地址。您可以使用strcmp或相同函数的各种其他形式来比较字符串。

可能会使您的代码正常工作的小改动如下所示。

do{
        printf("Enter desired text and press ENTER \n");
        .
        .
        .
        system("cls");
}
while (strcmp(sir1,sir_test));