鱼C论坛

 找回密码
 立即注册
查看: 843|回复: 9

[已解决]一个C语言的找错

[复制链接]
发表于 2020-5-7 14:44:48 | 显示全部楼层 |阅读模式
3鱼币
改了很久都没改对
从键盘输入某班(最多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[30];
    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[i]==x)
        {
            flag = 1;
        }
    }
    return flag;
}
最佳答案
2020-5-7 14:44:49
测试成功
三楼的应该有一个warning吧?
#include<stdio.h>
#include<string.h>
int Find(char (*pname)[20], int n, char *x);
int main()
{
    char pname[30][20];
    char x[20];
    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)[20], int n, char *x)
{
    int flag=0;
    int i;
  
    for (i = 0; i < n; i++)
    {
        if (!strcmp(*(pname+i),x))
        {
            flag = 1;
        }
    }
    return flag;
}

最佳答案

查看完整内容

测试成功 三楼的应该有一个warning吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 14:44:49 | 显示全部楼层    本楼为最佳答案   
测试成功
三楼的应该有一个warning吧?
#include<stdio.h>
#include<string.h>
int Find(char (*pname)[20], int n, char *x);
int main()
{
    char pname[30][20];
    char x[20];
    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)[20], int n, char *x)
{
    int flag=0;
    int i;
  
    for (i = 0; i < n; i++)
    {
        if (!strcmp(*(pname+i),x))
        {
            flag = 1;
        }
    }
    return flag;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 15:00:07 | 显示全部楼层
自己看吧,错误vim都给你标出来了,这种错误不应该犯吧?

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[30];
        char x[30];
        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[i] == x)
        {
            flag = 1;
        }
    }
    return flag;
}
经gcc测试可以正常使用

补充:
如果要查看结果的话在头文件加conio.h , return 0;上面加getch();即可 , 按照要求我没写上去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-7 15:18:58 | 显示全部楼层
PC_ 发表于 2020-5-7 15:10
经gcc测试可以使用

补充:

FV8RH4I9)$ABDB3@29HFZIG.png
我自己改也是有几个测试过不去...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-7 15:19:56 | 显示全部楼层
人造人 发表于 2020-5-7 15:00
自己看吧,错误vim都给你标出来了,这种错误不应该犯吧?

那几个地方好改,关键程序有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 15:21:04 | 显示全部楼层
星海风驰 发表于 2020-5-7 15:19
那几个地方好改,关键程序有问题

把你现在的代码发上来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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[30];
    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[i]==x)
        {
            flag = 1;
        }
    }
    return flag;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-7 15:29:20 | 显示全部楼层
sunrise085 发表于 2020-5-7 15:23
测试成功
三楼的应该有一个warning吧?

这个可以,测试没问题,我研究一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 15:47:54 | 显示全部楼层
星海风驰 发表于 2020-5-7 15:29
这个可以,测试没问题,我研究一下

满意请给个最佳
原程序中字符串比较是不对滴。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 00:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表