代码在DEv C ++和Ideone上运行,但不在竞争网站上运行

时间:2014-03-21 06:55:46

标签: c

此代码适用于DEVCPP和IDEONE,但此问题的网站不接受此代码。 这是一个在线竞争,内置的编译器说:编译失败。 这是一个在str1中找到str2的程序,如果找到则返回子字符串的索引。否则打印-1。

  

我知道不推荐使用GOTO。 :(对不起,请原谅。无法找到解决方法。

     

IDEONE链接:LINK

代码是:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
    char s1[19], s2[19],*p,c,d,k=0;
    int i;
    gets(s1);   gets(s2);
    p = strstr(s1,s2);

    if( (strlen(s2) > strlen(s1))   ||   !p      ) 
    {printf("-1");goto ex;}

    for(i=0;i<strlen(s1); i++)
    {
        c = s1[i];
        d = s1[i+1];
        if(c == s2[k]      &&    d == s2[k+1])
        {
            printf("%d", i);
            goto ex;

        }
    }
    ex:
    return 0;
}

1 个答案:

答案 0 :(得分:1)

a.c:15:14: error: comparison between signed and unsigned integer expressions

i无符号。

a.c:19:9: error: array subscript has type 'char'

make k int。

注意:

使用fgets代替gets

goto在某些情况下是可以的,比如您使用的模式可用于在return之前执行某些默认操作(例如,日志记录)。还要从内循环,跳转表使用(&amp;&amp;)中退出,在完成default:之一后执行case x:,在case x:之后重试以及其他几个