c语言根据字母找字符

Description
我们都知道人眼对自然界中的景物有不同的彩色感觉是因为日光(光源)包含有各种波长的可见光,
同时景物又具有不同的反射(或透射)特性的缘故。例如:西红柿具有反射红色光谱成分的特性,
在太阳光照射下其中的红色成分(吸收了其他光谱成分),所以人眼看到的西红柿是红色的。如果
把西红柿放到蓝光下,照射到西红柿上的蓝光被它吸收了,人眼看到的将是黑色的西红柿。

Input
我们在每组测试数据的第一行有一个字符,表示某个景物能够反射的颜色,第二行输入的是一行
字符串(长度不超过1000),表示一组照射到该景物上的光源(长度不超过26)。问,是否有光源
照射到景物上能够显示出景物的颜色,如果有则将每个光源按行输出,没有则输出“No!”。
有多组测试数据,每组测试数据的输出结果用一行空行分割开来。

Sample Input
r
ogr bg abc r
e
oga bw

Sample Output
ogr
r

No!

#include<stdio.h>
#include<string.h>
int main()
{
    char ch;
    int len,i,word,begin,num,ret,end,j,k;
    char a[1005];
    while(scanf("%c",&ch)!=EOF)
    {
        getchar();
        gets(a);
        len=strlen(a);
        word=0;j=0;num=0;
        for(i=j;i<=len-1;i++)
        {
            ret=-1;
            if(a[i]==' ')
            {
                word=0;
            }
            else if(a[i]!=' '&&word==0)
            {
                begin=i;
                word=1;
                for(j=begin;j<=len;j++)
                {
                    if(a[j]!=' ')
                    {
                        if(a[j]==ch)
                        {
                            ret=1;
                        }
                    }
                    else
                    {
                        end=j-1;
                        break;
                    }
                }
                end=j-1;
                if(ret==1)
                {
                    for(k=begin;k<=end;k++)
                    {
                        printf("%c",a[k]);
                    }
                    printf("\n");
                    num++;
                }
            }
            if(a[i]!=' ') i=end;
        }
        if(num==0) printf("No!\n");
        printf("\n");
    }
    return 0;
}

找找错误在哪里

该回答引用ChatGPT4与博主@晓码自在合作编写:
编译错误基本上有以下几种原因:

  1. 语法错误:如少括号、分号等,这会直接导致编译错误。需要检查每一行的语法是否正确。
  2. 类型不匹配:如把int赋值给char,这会产生无法隐式类型转换的错误。需要检查每个表达式和语句的数据类型是否匹配。
  3. 未定义的标识符:如使用了未定义的变量名、函数名等,这会产生标识符未定义的错误。需要检查每个变量、函数等是否已经定义过。
  4. 头文件缺失:如使用了某函数但未包含对应的头文件,这会产生函数未定义的错误。需要检查每个头文件是否已经包含。
  5. 其他:数组下标越界、重复定义、宏问题等也可能导致编译错误。
    根据这几种类型的错误,需要仔细检查代码,查找问题所在。一般通过阅读编译错误提示可以定位到出错的行数,甚至列数,然后看那一行和前后几行的代码,对照上述类型的错误进行分析查找。常见的手段还包括:
  6. 重要的Compiler Warning也需要关注,这样可以提前发现一些问题。
  7. 逐行注释代码,然后逐步反注释,定位具体的出错行。
  8. 使用printf等插入打印语句,查看变量值的变化,也可以帮助调试。
  9. 可以在出现错误的行附近插入一些中间变量,观察其值的变化,追踪错误源头。
  10. 也可使用IDE的Debug功能,逐语句执行代码,观察变量的值变化,找到问题原因。

供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    int flg;
    char a[1001], ch, * p, * pchr;
    while (scanf(" %c", &ch) != EOF && ch != '#') { // 输入 ‘#’时结束输入
        getchar();
        gets(a);
        flg = 0;
        p = strtok(a, " ");
        while (p) {
            pchr = strchr(p, ch);
            if (pchr)
                printf("%s\n", p), flg++;
            p = strtok(NULL, " ");
        }
        if (!flg)
            printf("No!\n");
    }
    return 0;
}