离岛. 2022-06-01 20:18 采纳率: 100%
浏览 165
已结题

一道c语言题,要求返回字符指针函数实现

我是一名在学习C语言的学生,遇到了如下的题目,我自己在devc++里是完全没有问题的。但是我把答案提交到希冀平台的时候就错了,而且0分,改了一下午,很痛苦,希望能为我指出问题,或者帮我写出来,6元真心感谢。

【问题描述】编写程序,输入一个字符串后再输入两个字符,输出此字符串中从与第1个字符匹配的位置开始到与第2个字符匹配的位置结束的所有字符。用返回字符指针的函数实现
【输入形式】
【输出形式】
【样例输入】program
r
g
【样例输出】rog
【样例说明】
【评分标准】

这个是我写的代码
#include <stdio.h>
char *fun(char *p, char begin, char end); 
int main()
{
    char string[100];
    gets(string);
    char *p, begin, end;
    p =string;


    scanf("%c\n", &begin);
    scanf("%c", &end);
    
    puts( fun(p, begin, end) );
    
    return 0; 
}
char *fun(char *p, char begin, char end)
{
    int k = 0, m = 0;

    char string[100];
    char *ans;
    ans = string;
    int tag = 0;
    while( *(p+k) != 0)
    {
        if(*(p+k) == begin || tag == 1)
        {
            *(ans+m) = *(p+k);
            m++;
            tag = 1;
        }
        if(*(p+k) == end && tag == 1)
        {
            break;
        }
        k++;
    }
    *(ans + m) = 0x00;
    
    return ans;
}

运行结果及报错内容

(我在devc++是正常的,以下是希冀平台的报错)
得分0.00 最后一次提交时间:2022-06-01 20:07:39
成功编译,但有警告信息.
_05.cpp: In function 'int main()':
_05.cpp:6:2: warning: 'char* gets(char*)' is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(string);
^
_05.cpp:6:13: warning: 'char* gets(char*)' is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(string);
^
/tmp/cceiOxpQ.o: In function main': _05.cpp:(.text.startup+0xd): warning: the gets' function is dangerous and should not be used.
共有测试数据:5
平均占用内存:2.353K 平均CPU时间:0.00462S 平均墙钟时间:0.00463S

错误输出:
?`?dn
期望输出:
rog

错误输出:
Р?~
期望输出:
abcdef

错误输出:
?`?x?
期望输出:
ello

我的解答思路和尝试过的方法

我怀疑是我在输入的部分有差错(又或是指针?)
scanf("%c\n", &a);
getchar();//想把\n放掉
scanf("%c", &b);
最后当然还是0分

我想要达到的结果

可以在希冀平台上成功运行得分
其实我也想知道,到底是啥问题啊
真心感谢!!

  • 写回答

2条回答 默认 最新

  • 四海一叶秋 2022-06-01 20:51
    关注
    
    #include <stdio.h>
    char *fun(char *p, char begin, char end)
    {
        char *str;
        for (; *p != begin; p++);
        str=p;
        for (; *str != end; str++);
        *(str + 1) = 0;
        return p;
    }
    int main()
    {
        char string[100];
        char begin, end;
        char *p = string;
        fgets(string, 100, stdin);
        scanf("\n%c", &begin);
        scanf("\n%c", &end);
        puts(fun(p, begin, end));
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月13日
  • 已采纳回答 6月5日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?