3

私はdelete構造体の配列に関数booksを持っています。私はそれにレコードの配列を渡してauthor of bookname of bookますsize of the list

ここlist[0].authorandlist[5].authorauthorall が "Dan Brown" (同じ文字列) と等しいとすると

void delete(struct books *list,char author[],char name[],int n)
{
    int i,a;
    a=strcmp(list[0].author,list[5].author);
    printf("%d\n",a);              // prints 0
    a=strcmp(list[0].author,author);
    printf("%d\n",a);              // prints other than 0
}    

なぜそれが起こっているのですか?ここで何が問題なのですか?

4

3 に答える 3

1

入力を確認する必要があります。場合によっては、複数の方法が必要になることがあります。ここでは、strlen()とを使用していますstrstr()。なぜなら、長さが==で、部分文字列が存在する場合、文字列は等しいからです。したがって、結論を出す前に、次のようなことを試して、入力文字列が意図したとおりであることを確認してください。

注: enum はもちろん必要ありませんが、出力の例を明確にするためにここに含まれています。

enum    {
    SAME,     //0
    NOT_SAME  //1
}

void delete(struct books *list,char author[],char name[],int n)
{
    int i,a, len1, len2;
    A = NOT_SAME;
    len1 = strlen(list[0].author);
    len2 = (list[5].author);
    if(strstr(list[0].author,list[5].author) && (len1==len2)) a = SAME;
    printf("%d\n",a);              


    a = NOT_SAME;
    len1 = strlen(list[0].author);
    len2 = (author);
    if(strstr(list[0].author,author) && (len1==len2)) a = SAME;
    printf("%d\n",a);              

}    
于 2013-10-26T17:20:26.120 に答える