关于#C语言字符串#的问题

很多食物一起吃会引起不良反应,例如:

红薯和柿子——会得结石(potato persimmon)

鸡蛋和糖精——容易中毒(eg glucide)

洋葱和蜂蜜——伤害眼睛(onion honey)

豆腐和蜂蜜——引发耳聋(bean-curd honey)

萝卜和木耳——皮肤发炎(radis agaric)

芋头和香蕉——腹胀(taro banana)

花生和黄瓜——伤害肾脏(pignut cucumber)

牛肉和栗子——引起呕吐(beef chestnut)

兔肉和芹菜——容易脱发(rabbit celery)

螃蟹和柿子——腹泻(crab persimmon)

鲤鱼和甘草——会中毒(carp liquorice)

请写程序判断给定的一组食物是否能一起食用。

输入格式:
输入的第一行为整数n(n<=100),表示多少组食物。其后有n行,每行输入一组(两种)食物的名称,用空格作为分隔(食物名称中不含空格,并且其长度不超过64个字符)。

输出格式:
输出有n行,对应的两种食物能一起食用时,输出YES,否则输出NO。

输入样例:
4
cucumber chestnut
crab carp
rabbit celery
rabbit rabbit
输出样例:
YES
YES
NO
YES

#include 
#include 
int main()
{
    int i,j,n;
    char x,y;
    scanf("%d",&n);
    char a[11][2][20]={{"potato","persimmon"},{"egg","glucide"},
                       {"onion","honey"},{"bean-curd","honey"},
                       {"radis","agaric"},{"taro","banana"},
                       {"pignut","cucumber"},{"beef","chestnut"},
                       {"rabbit","celery"},{"crab","persimmon"},
                       {"carp","liquorice"}};
    while(n--){
        scanf("%s%s",x,y);
        for(i=0;i<11;i++)
            if(strcmp(x,a[i][0])==0&&strcmp(y,a[i][1])==0||strcmp(y,a[i][0])==0&&strcmp(x,a[i][1])==0)
                break;
        if(i==11)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

第6行,x和y应该定义成字符串,而不是定义成字符。 char x[20], y[20]。 按照原本的写法,x和y都只能存放一个字符,在strcmp函数中使用会报错。

#include <stdio.h>
#include <string.h>
int main()
{
    int i,j,n;
    char x[20],y[20];
    scanf("%d",&n);
    char a[11][2][20]={{"potato","persimmon"},{"egg","glucide"},
                       {"onion","honey"},{"bean-curd","honey"},
                       {"radis","agaric"},{"taro","banana"},
                       {"pignut","cucumber"},{"beef","chestnut"},
                       {"rabbit","celery"},{"crab","persimmon"},
                       {"carp","liquorice"}};
    while(n--){
        scanf("%s %s",x,y);
        for(i=0;i<11;i++)
            if(strcmp(x,a[i][0])==0&&strcmp(y,a[i][1])==0||strcmp(y,a[i][0])==0&&strcmp(x,a[i][1])==0)
                break;
        if(i==11)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

char x,y; 定义错误,修改如下,供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    int i, j, n;
    char x[65], y[65];  //修改  char x, y;
    char a[11][2][65] = { {"potato","persimmon"},{"egg","glucide"}, //修改
                          {"onion","honey"},     {"bean-curd","honey"},
                          {"radis","agaric"},    {"taro","banana"},
                          {"pignut","cucumber"}, {"beef","chestnut"},
                          {"rabbit","celery"},   {"crab","persimmon"},
                          {"carp","liquorice"} };
    scanf("%d", &n);
    while (n--) {
        scanf("%s %s", x, y); //修改
        for (i = 0; i < 11; i++)
            if (strcmp(x, a[i][0]) == 0 && strcmp(y, a[i][1]) == 0 || strcmp(y, a[i][0]) == 0 && strcmp(x, a[i][1]) == 0)
                break;
        if (i == 11)
            printf("YES");
        else
            printf("NO");
        if (n)          //最后一行不需回车换行
            printf("\n");
    }
    return 0;
}