John_Gcn 2023-04-18 10:04 采纳率: 83.3%
浏览 23
已结题

关于#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 <stdio.h>
#include <string.h>
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;
}

  • 写回答

2条回答 默认 最新

  • 乘风xs 2023-04-18 10:43
    关注

    第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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月23日
  • 已采纳回答 4月23日
  • 创建了问题 4月18日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效