同一段代码用gets输入字符串是对的,而scanf就是错的,求解答。

现象:同一段代码,使用gets函数获得字符串,OJ系统判定为正确;使用scanf获取字符串,OJ系统盘判定为错误。
         题目:编写函数fun,其功能是将字符串s下标为奇数的字符删除,字符串中剩余字符形成的新字符串放在数组t中。
         主函数中输入字符串s,调用函数,输出字符数组t。
         输入说明:共一行,输入字符串s
         输出说明:共一行,输出字符串t
         输入示例:abcd1234
         输出示例:ac13
背景:用的是西电的C语言OJ,平台似乎很老了,标准也是旧的,不知道是不是因为旧才出问题
#include
#include
void fun(char a[]){//思路就是先将字符串存入a数组,选取下标奇数的元素存入b数组,然后输出。
    char b[100];
    int i,m=strlen(a);
    for(i=0;iif(i%2==0){
            b[i/2]=a[i];
        }
    }
    m=strlen(b);
    for(i=0;iprintf("%c",b[i]);
    }
}
int main(){
    char a[100];
    gets(a);//问题就在这里,使用gets语句OJ给100,使用下一行的scanf语句OJ给0分
    //scanf("%s",a);
    fun(a);
    return 0;
}
运行结果其实都一样,但是用scanf的话OJ不给分
思路上边写了,就是先将字符串存入a数组,选取下标奇数的元素存入b数组,然后输出。
请帮帮我吧,刚上大学,头一次学编程,懵逼的一批。

img

望采纳!!!

scanf("%c",&a)

输入语句用scanf("%[^\n]", a);试试,另fun()函数里做了修改,改动处见注释,供参考:

#include<stdio.h>
#include<string.h>
void fun(char a[]){//思路就是先将字符串存入a数组,选取下标奇数的元素存入b数组,然后输出。
    char b[100];
    int i,m=strlen(a),j=0;//修改
    for(i=0;i<m;i++){
        if(i%2==0){
            b[j++]=a[i]; //b[i/2]=a[i]; 修改
        }
    }
    b[j]='\0';          //修改
    m=strlen(b);
    for(i=0;i<m;i++){
        printf("%c",b[i]);
    }
}
int main(){
    char a[100];
    //gets(a);//问题就在这里,使用gets语句OJ给100,使用下一行的scanf语句OJ给0分
    scanf("%[^\n]", a);//scanf("%s",a); //修改
    fun(a);
    return 0;
}

scanf从键盘输入的是字符,并非字符串,而你用%s接收