C语言Pta编译结果与xcode结果不一致,如何解决?

问题遇到的现象和发生背景

在做学校留的pta作业题的时候,发生编译结果不一致的情况。pta编译器输出结果为三行-1,xcode以及vscode等其他编译器都可以实现运行。 希望能知道哪里出现了问题,感谢!
这是原题目:7-1 组织星期信息 (10 分)
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

定义一个指针数组将下面的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

输入输出示例:括号内为说明,无需输入输出
输入样例 (repeat=3) :
3
Tuesday
Wednesday
year
输出样例:
3
4
-1

问题相关代码,请勿粘贴截图

//
//  main.c
//  cex5_pointers&structures
//
//  Created by Eawen C. on 2022/4/24.
//

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

int main()
{
    int repeat = 0;
    scanf("%d", &repeat);
    fflush(stdin);

    static char a[10] = "Sunday";
    static char b[10] = "Monday";
    static char c[10] = "Tuesday";
    static char d[10] = "Wednesday";
    static char e[10] = "Thursday";
    static char f[10] = "Friday";
    static char g[10] = "Saturday";

    char *pt[7] = {0};
    char *pttmp = &a[0];
    for (int i = 0; i < 7; i = i + 1)
    {
        pt[i] = pttmp;
        pttmp = pttmp + 10;
    }
    
    int result[10] = {0};
    int number = 0;
    while (repeat)
    {
        fflush(stdin);
        char input[1000] = {0};
        // printf("type: \n");
        fgets(input, 1000, stdin);
        // printf("%s", input);
        for (int i = 0; i < 7; i++)
        {
            int j = 0;
            long deter = strlen(pt[i]);
            while (deter != 0)
            {
                char *ptstore = pt[i];
                while (input[j] == *pt[i])
                {
                    pt[i]++;
                    deter--;
                    j++;
                }
                pt[i] = ptstore;
                if (deter == 0)
                {
                    result[number] = i + 1;
                    goto here;
                }
                else
                {
                    break;
                }
            }
        }
        result[number] = -1;
    here:
        repeat--;
        number++;
    }

    for (int i = 0; i < number; i++) {
        printf("%d\n", result[i]);
    }
    return 0;
}

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

由于刚开始学习指针,没有用现成的strcmp,而是自己实现了一个比对方法,但是pta却跑不起来。

尽量避免使用goto

 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    int repeat = 0,number = 0,i,j;
    scanf("%d", &repeat);

    char *arr[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; 
    int *result = (int*)malloc(repeat*sizeof(int));
    char input[1000];

    while (number < repeat)
    {
        fflush(stdin);
        // printf("type: \n");
        //fgets(input, 1000, stdin);
        scanf("%s",input);
        // printf("%s", input);
        for (i = 0; i < 7; i++)
        {
            j = 0;            
            while (arr[i][j] && input[j])
            {                
                if(arr[i][j] != input[j])
                    break;
                j++;
            }
            if(!(arr[i][j] && input[j]))    //相同
            {                
                result[number]=i+1;
                break;
            }
        }
        if(i==7)
            result[number]=-1;
        number++;        
    }
 
    for (int i = 0; i < repeat; i++) {
        printf("%d\n", result[i]);
    }

    return 0;
}

题主考虑的太复杂了,换种写法,供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    int repeat = 0, i, flg;
    //定义一个指针数组将星期信息组织起来
    char* pweek[7] = { "Sunday" ,"Monday" ,"Tuesday" ,"Wednesday" ,"Thursday" ,"Friday" ,"Saturday" };
    char str[10] = { 0 }; //定义一个字符串
    scanf("%d", &repeat);
    while (repeat--) {
        scanf("%s", str);
        for (i = 0, flg = -1; i < 7; i++) {
            if (strcmp(pweek[i], str) == 0) {
                flg = i + 1;
                break;
            }
        }
        printf("%d\n", flg);
    }
    return 0;
}

问题已经解决了哈,应该是pta后台所用编译机器(可能是Linux系统等问题),使原代码中的这一部分:

static char a[10] = "Sunday";
    static char b[10] = "Monday";
    static char c[10] = "Tuesday";
    static char d[10] = "Wednesday";
    static char e[10] = "Thursday";
    static char f[10] = "Friday";
    static char g[10] = "Saturday";
 
    char *pt[7] = {0};
    char *pttmp = &a[0];
    for (int i = 0; i < 7; i = i + 1)
    {
        pt[i] = pttmp;
        pttmp = pttmp + 10;
    }


无法正常执行并赋值。受楼上老哥启发,把赋值部分改写成:

char *pt[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

即可正常编译并通过了。
下面是修改后的全部代码:

//
//  main.c
//  cex5_pointers&structures
//
//  Created by Eawen C. on 2022/4/24.
//

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

int main()
{
    int repeat = 0;
    scanf("%d", &repeat);
    fflush(stdin);

    char *pt[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    
    int result[10] = {0};
    int number = 0;
    while (repeat)
    {
        fflush(stdin);
        char input[1000] = {0};
        // printf("type: \n");
        scanf("%s", input);
        //fgets(input, 1000, stdin);
        // printf("%s", input);
        for (int i = 0; i < 7; i++)
        {
            int j = 0;
            long deter = strlen(pt[i]);
            while (deter != 0)
            {
                char *ptstore = pt[i];
                while (input[j] == *pt[i] &&input[j]!=0)
                {
                    pt[i]++;
                    deter--;
                    j++;
                }
                pt[i] = ptstore;
                if (deter == 0)
                {
                    result[number] = i + 1;
                }
                else
                {
                    break;
                }
            }
        }
        repeat--;
        number++;
    }

    for (int i = 0; i < number; i++) {
        if (result[i] == 0) {
            result[i] = -1;
        }
        printf("%d\n", result[i]);
    }
    return 0;
}