m0_50295480 2022-04-25 10:55 采纳率: 100%
浏览 78
已结题

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却跑不起来。

  • 写回答

3条回答 默认 最新

  • 浪客 2022-04-25 11:43
    关注

    尽量避免使用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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月3日
  • 已采纳回答 4月25日
  • 修改了问题 4月25日
  • 创建了问题 4月25日

悬赏问题

  • ¥20 三爪夹具,在重物的影响下,三爪受力怎么分析?能把三个爪当成螺栓吗?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目