C 为什么;而";满足条件时循环不结束?

C 为什么;而";满足条件时循环不结束?,c,C,我有一个明显容易的问题,但我就是不知道我做错了什么。 我有一个代码,它将测试控制台中输入的60个字符的文本,如果文本中出现“恐怖分子”一词,它将提示消息“可疑文本”,当该词不出现时,它将显示“无可疑”。 输入“完成”时,输入“模式”的文本应结束。这似乎是我的问题,因为我的while循环不想结束 有什么提示吗 #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib

我有一个明显容易的问题,但我就是不知道我做错了什么。 我有一个代码,它将测试控制台中输入的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;


}
#包括
#包括
#包括
#包括
int start_与(char*sir1,char*sir2)
{
int i,j,k;
int len_sir2=strlen(sir2);
char sir3[60]=“”;

对于(i=0;i您应该使用比较C样式字符串,如下所示

while (strcmp(sir1, sir_test) != 0)
这是因为当您执行sir1!=sir_test时,您实际测试的是两个字符数组是否指向内存中的同一地址,这是不正确的,因为它们是位于两个不同内存地址的两个不同字符数组


相反,您要做的是比较每个变量内存空间中包含的字符,这就是strcmp所做的:它逐个字符进行比较,直到找到一个空终止字符。

而不是
while(sir1!=sir\u test)
,尝试以下操作:
while(strcmp(sir1,sir\u test))
strcmp
strcmpi
等是用于字符串比较的适当函数。它们在
string.h
头文件下声明。

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

下面显示了一个可能使代码正常工作的小更改

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

strcmp是您的朋友,但仍然…我的sir1变量加载了文本“done”(sir[0]=“d”,sir[1]=“o”,等等),我可以从调试中看到值,但是strcmp(sir1,“done”)或strcmp(sir1,sir_test)返回0。有什么原因它不是1吗?谢谢您的详细回答。@al Acme给了我提示…但我的sir1变量仍然有文本“done”已加载(sir[0]=“d”,sir[1]=“o”等),我可以从调试中看到值,但strcmp(sir1,“done”)或strcmp(sir1,sir_test)返回0。有什么原因它不是1吗?–BogdanM 3分钟前edit@BogdanMstrcmp返回(取自文档):
如果lhs和rhs比较相等,则返回零。
。因此您得到了正确的结果。