星海风驰 发表于 2020-5-7 14:44:48

一个C语言的找错

改了很久都没改对
从键盘输入某班(最多30人)学生的姓名(长度不超过20),再从键盘输入任意一个学生的姓名,判断该学生是否在该班级,若在该班级则打印该学生的姓名,反之打印"Not find!"。Find函数用来查找该学生是否存在,若存在函数返回值是1,否则函数返回值为0。以下程序用以实现以上功能,但该程序存在一些较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
注意:
(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。
(2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。
(3)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。
#include<stdio.h>
int Find(char *pname[], int n, char x[]);
int main()
{
    char *pname;
    char x;
    int i, n, flag;

    printf("Please input n:\n");
    scanf("%d", &n);

    for (i = 0, i < n; i++);
    {
      scanf("%s", pname);
    }

    printf("Input search string:\n");
    scanf("%s", x);

    flag = Find(pname[], n, x);
    if (flag)
      printf("%s", x);
    else
      printf("Not find!");

    return 0;
}
int Find(char *pname[], int n, char x[]);
{
    int flag;
    int i;

    for (i = 0; i < n; i++)
    {
      if (pname==x)
      {
            flag = 1;
      }
    }
    return flag;
}

sunrise085 发表于 2020-5-7 14:44:49

测试成功
三楼的应该有一个warning吧?
#include<stdio.h>
#include<string.h>
int Find(char (*pname), int n, char *x);
int main()
{
    char pname;
    char x;
    int i, n, flag=0;

    printf("Please input n:\n");
    scanf("%d", &n);

    for (i = 0; i < n; i++)
    {
      scanf("%s", *(pname+i));
    }
    printf("Input search string:\n");
    scanf("%s", x);

    flag = Find(pname, n, x);
    if (flag)
      printf("%s", x);
    else
      printf("Not find!");

    return 0;
}
int Find(char (*pname), int n, char *x)
{
    int flag=0;
    int i;

    for (i = 0; i < n; i++)
    {
      if (!strcmp(*(pname+i),x))
      {
            flag = 1;
      }
    }
    return flag;
}

人造人 发表于 2020-5-7 15:00:07

自己看吧,错误vim都给你标出来了,这种错误不应该犯吧?

PC_ 发表于 2020-5-7 15:10:20

本帖最后由 PC_ 于 2020-5-7 15:20 编辑

#include<stdio.h>
int Find(char *pname[], int n, char x[]);

int main()
{
        char *pname;
        char x;
        int i, n, flag;
       
        printf("Please input n:\n");
        scanf("%d", &n);
       
        for (i = 0; i < n; i++)
        {
                scanf("%s", pname + i);
        }
       
        printf("Input search string:\n");
        scanf("%s", x);
       
        flag = Find(pname, n, x);
        if (flag)
                printf("%s", x);
      else
                printf("Not find!");
       
    return 0;
}

int Find(char *pname[], int n, char x[])
{
    int flag;
    int i;

    for (i = 0; i < n; i++)
    {
      if (pname == x)
      {
            flag = 1;
      }
    }
    return flag;
}
经gcc测试可以正常使用{:10_257:}

补充:
如果要查看结果的话在头文件加conio.h , return 0;上面加getch();即可 , 按照要求我没写上去

星海风驰 发表于 2020-5-7 15:18:58

PC_ 发表于 2020-5-7 15:10
经gcc测试可以使用

补充:



我自己改也是有几个测试过不去...

星海风驰 发表于 2020-5-7 15:19:56

人造人 发表于 2020-5-7 15:00
自己看吧,错误vim都给你标出来了,这种错误不应该犯吧?

那几个地方好改,关键程序有问题{:10_266:}

人造人 发表于 2020-5-7 15:21:04

星海风驰 发表于 2020-5-7 15:19
那几个地方好改,关键程序有问题

把你现在的代码发上来

星海风驰 发表于 2020-5-7 15:25:50

人造人 发表于 2020-5-7 15:21
把你现在的代码发上来


#include<stdio.h>
int Find(char *pname[], int n, char x[]);
int main()
{
    char *pname;
    char x;
    int i, n, flag;

    printf("Please input n:\n");
    scanf("%d", &n);

    for (i = 0; i < n; i++);
    {
      scanf("%s", pname);
    }

    printf("Input search string:\n");
    scanf("%s", x);

    flag = Find(pname, n, x);
    if (flag)
      printf("%s", x);
    else
      printf("Not find!");

    return 0;
}
int Find(char *pname[], int n, char x[])
{
    int flag;
    int i;

    for (i = 0; i < n; i++)
    {
      if (pname==x)
      {
            flag = 1;
      }
    }
    return flag;
}

星海风驰 发表于 2020-5-7 15:29:20

sunrise085 发表于 2020-5-7 15:23
测试成功
三楼的应该有一个warning吧?

这个可以,测试没问题,我研究一下{:10_297:}

sunrise085 发表于 2020-5-7 15:47:54

星海风驰 发表于 2020-5-7 15:29
这个可以,测试没问题,我研究一下

满意请给个最佳
原程序中字符串比较是不对滴。
页: [1]
查看完整版本: 一个C语言的找错