0

文字列のいずれかが一致した場合に同じ printf を出力するプログラムを作成しようとしています。以下を試しましたが、うまくいきません。ここで、最初の文字列または 2 番目の文字列を比較しました。いずれかが同じ場合は、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");

}

ここで何が欠けていますか?

4

1 に答える 1

1

ifprint ステートメントが、投稿の最初の文または表現と一致しません。両方が等しいことをテストしたい場合は、&&ではなくを使用する必要があります||。いずれかの文字列がテスト文字列と一致するかどうかをテストしたい場合、プログラムは問題ありません。コードの別の部分に問題があるはずです。これを証明するプログラムの例を次に示します。

#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

編集:さらに読んで、実際にテストして、それらの1つが正確に一致するかどうかを確認したいと思うかもしれません。その場合、. に別の式が必要になります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 
于 2013-02-06T00:59:42.250 に答える