0

私は単純なプログラムを持っていますが、入力された文字列を比較すると常に0にならないため、何かが欠けています.

私のコード:

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

int main()
{
int loop = 1;
char response[9];
char *Response;

printf("Enter a string: ");

while(loop = 1)
    {
    scanf("%s", &response);
    Response = response;

    if(strcmp(Response,"Random") != 0 || strcmp(Response,"Database") != 0 || strcmp    (Response,"Both") != 0)
        printf("\n\"%s\" is an invalid entry. Valid responses are: \"Random\", \"Database\", or \"Both\": ", Response);

    else
        break;
    }

printf("\nYour string is: %s\n", Response);

return 0;
}

「Random」、「Database」、または「Both」と入力しても、文字列が無効であると認識されます。助けてください。ありがとう!

4

4 に答える 4

3

これに変更します:

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

int main()
{
    int loop = 1;
    char response[9];
    char *Response;

    printf("Enter a string: ");

    while(loop = 1)
        {
        scanf("%s", &response);
        Response = response;

        if(strcmp(Response,"Random") == 0 || strcmp(Response,"Database") ==0  || strcmp    (Response,"Both") ==0 ){
        //correct response
            break;
        }else{
            printf("\n\"%s\" is an invalid entry. Valid responses are: \"Random\", \"Database\", or \"Both\": ", Response);
        }

    }

    printf("\nYour string is: %s\n", Response);

    return 0;
}

出力

Sukhvir@Sukhvir-PC ~
$ ./test
Enter a string: sdjkfjskfjaskd

"sdjkfjskfjaskd" is an invalid entry. Valid responses are: "Random", "Database", or "Both": Both

Your string is: Both

Sukhvir@Sukhvir-PC ~
$ ./test
Enter a string: Both

Your string is: Both
于 2013-10-24T04:15:00.223 に答える
2

ユーザーがを入力すると、次のRandomようになります。

  • strcmp(Response, "Random") != 0=> 0
  • strcmp(Response, "Database") != 0=> 1
  • strcmp(Response, "Both") != 0=> 1

以降(0 || 1 || 1) => 1if成功し、エラー メッセージが出力されます。

orではなくandで比較を接続する必要があります。

if(strcmp(Response,"Random") != 0 && strcmp(Response,"Database") != 0 && strcmp(Response,"Both") != 0)

次に(0 && 1 && 1) => 0ifエラーメッセージを出力しません。

于 2013-10-24T04:15:52.907 に答える
2

文字列が「ランダム」ではないか、「データベース」ではないか、「両方」ではないかをテストしています。

それが「ランダム」であると仮定します。それは確かに「データベース」ではないため、無効であると報告します。

に置き換え||ます&&

于 2013-10-24T04:15:18.960 に答える
-1

strncmp を使用します。

if (strncmp(str, "test", 4) == 0) { printf("一致します!"); }

詳細については、このリンクを使用してください

http://www.cplusplus.com/reference/cstring/strncmp/

于 2013-10-24T04:17:02.093 に答える