如果两个字符串匹配中的任何一个匹配则打印相同的输出

时间:2013-02-06 00:58:40

标签: c

我正在尝试编写一个程序,如果任何一个字符串匹配,它将输出相同的printf。我试过跟随,但它不适合我。在这里我做了比较第一个字符串或第二个字符串,如果任何一个相同,那么它应该打印printf中列出的语句。

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

int main (){

    char string1[10];
    char string2[10];

    printf("Enter the first string: ");
    scanf ("%s", string1);

    printf("Enter the second string: ");
    scanf ("%s", string2);

    if ((strcmp(string1, "test1") == 0) || (strcmp (string2, "test2") ==0))

        printf ("Both strings are same\n");

    else printf("You didnt enter any matching \n");

}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您的打印声明与帖子的第一句话或if表达式不符。如果您要测试两者相等,则应使用&&而不是||。如果你想测试其中一个字符串是否与你的测试字符串匹配,你的程序就可以了。您必须对代码的不同部分有问题。这是一个示例程序,可以为您证明:

#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
    char *string1 = argv[1];
    char *string2 = argv[2];

    if ((strcmp(string1, "test1") == 0) || (strcmp (string2, "test2") ==0)) 
         printf ("At least one string matched\n");

    return 0;
}

输出:

$ ./example test1 bad
At least one string matched
$ ./example bad test2
At least one string matched
$ ./example bad bad
$ ./example test1 test2
At least one string matched

编辑:在进一步阅读时我发现你实际上可能想要进行测试,以确定完全其中一个是否匹配。在这种情况下,您需要在if中使用不同的表达式。也许是这样的:

int string1Matches = (strcmp(string1, "test1") == 0);
int string2Matches = (strcmp(string2, "test2") == 0);

if ((string1Matches && !string2Matches) || (!string1Matches && string2Matches))
    printf("Exactly one string matches (not both!)\n");

再次编辑:

你的新程序似乎运行正常 - 你的问题是什么?示例输出:

$ ./example 
Enter the first string: test1
Enter the second string: bad
Both strings are same
$ ./example 
Enter the first string: bad  
Enter the second string: test2
Both strings are same
$ ./example 
Enter the first string: test1
Enter the second string: test2
Both strings are same
$ ./example 
Enter the first string: bad
Enter the second string: bad
You didnt enter any matching