鱼C论坛

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

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

[复制链接]
发表于 2020-5-7 14:44:48 | 显示全部楼层 |阅读模式
3鱼币
改了很久都没改对
  1. 从键盘输入某班(最多30人)学生的姓名(长度不超过20),再从键盘输入任意一个学生的姓名,判断该学生是否在该班级,若在该班级则打印该学生的姓名,反之打印"Not find!"。Find函数用来查找该学生是否存在,若存在函数返回值是1,否则函数返回值为0。以下程序用以实现以上功能,但该程序存在一些较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
  2. 注意:
  3. (1)请将修改正确后的完整源程序拷贝粘贴到答题区内。
  4. (2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。
  5. (3)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。
  6. #include<stdio.h>
  7. int Find(char *pname[], int n, char x[]);
  8. int main()
  9. {
  10.     char *pname[30];
  11.     char x;
  12.     int i, n, flag;
  13.   
  14.     printf("Please input n:\n");
  15.     scanf("%d", &n);
  16.   
  17.     for (i = 0, i < n; i++);
  18.     {
  19.         scanf("%s", pname[i]);
  20.     }

  21.     printf("Input search string:\n");
  22.     scanf("%s", x);
  23.   
  24.     flag = Find(pname[], n, x);
  25.     if (flag)
  26.         printf("%s", x);
  27.     else
  28.         printf("Not find!");
  29.   
  30.     return 0;
  31. }
  32. int Find(char *pname[], int n, char x[]);
  33. {
  34.     int flag;
  35.     int i;
  36.   
  37.     for (i = 0; i < n; i++)
  38.     {
  39.         if (pname[i]==x)
  40.         {
  41.             flag = 1;
  42.         }
  43.     }
  44.     return flag;
  45. }
复制代码
最佳答案
2020-5-7 14:44:49
测试成功
三楼的应该有一个warning吧?
  1. #include<stdio.h>
  2. #include<string.h>
  3. int Find(char (*pname)[20], int n, char *x);
  4. int main()
  5. {
  6.     char pname[30][20];
  7.     char x[20];
  8.     int i, n, flag=0;
  9.   
  10.     printf("Please input n:\n");
  11.     scanf("%d", &n);
  12.   
  13.     for (i = 0; i < n; i++)
  14.     {
  15.         scanf("%s", *(pname+i));
  16.     }
  17.     printf("Input search string:\n");
  18.     scanf("%s", x);
  19.   
  20.     flag = Find(pname, n, x);
  21.     if (flag)
  22.         printf("%s", x);
  23.     else
  24.         printf("Not find!");
  25.   
  26.     return 0;
  27. }
  28. int Find(char (*pname)[20], int n, char *x)
  29. {
  30.     int flag=0;
  31.     int i;
  32.   
  33.     for (i = 0; i < n; i++)
  34.     {
  35.         if (!strcmp(*(pname+i),x))
  36.         {
  37.             flag = 1;
  38.         }
  39.     }
  40.     return flag;
  41. }
复制代码

最佳答案

查看完整内容

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

使用道具 举报

发表于 2020-5-7 14:44:49 | 显示全部楼层    本楼为最佳答案   
测试成功
三楼的应该有一个warning吧?
  1. #include<stdio.h>
  2. #include<string.h>
  3. int Find(char (*pname)[20], int n, char *x);
  4. int main()
  5. {
  6.     char pname[30][20];
  7.     char x[20];
  8.     int i, n, flag=0;
  9.   
  10.     printf("Please input n:\n");
  11.     scanf("%d", &n);
  12.   
  13.     for (i = 0; i < n; i++)
  14.     {
  15.         scanf("%s", *(pname+i));
  16.     }
  17.     printf("Input search string:\n");
  18.     scanf("%s", x);
  19.   
  20.     flag = Find(pname, n, x);
  21.     if (flag)
  22.         printf("%s", x);
  23.     else
  24.         printf("Not find!");
  25.   
  26.     return 0;
  27. }
  28. int Find(char (*pname)[20], int n, char *x)
  29. {
  30.     int flag=0;
  31.     int i;
  32.   
  33.     for (i = 0; i < n; i++)
  34.     {
  35.         if (!strcmp(*(pname+i),x))
  36.         {
  37.             flag = 1;
  38.         }
  39.     }
  40.     return flag;
  41. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 编辑
  1. #include<stdio.h>
  2. int Find(char *pname[], int n, char x[]);

  3. int main()
  4. {
  5.         char *pname[30];
  6.         char x[30];
  7.         int i, n, flag;
  8.        
  9.         printf("Please input n:\n");
  10.         scanf("%d", &n);
  11.        
  12.         for (i = 0; i < n; i++)
  13.         {
  14.                 scanf("%s", pname + i);
  15.         }
  16.        
  17.         printf("Input search string:\n");
  18.         scanf("%s", x);
  19.        
  20.         flag = Find(pname, n, x);
  21.         if (flag)
  22.                 printf("%s", x);
  23.         else
  24.                 printf("Not find!");
  25.        
  26.     return 0;
  27. }

  28. int Find(char *pname[], int n, char x[])
  29. {
  30.     int flag;
  31.     int i;
  32.   
  33.     for (i = 0; i < n; i++)
  34.     {
  35.         if (pname[i] == x)
  36.         {
  37.             flag = 1;
  38.         }
  39.     }
  40.     return flag;
  41. }
复制代码

经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
把你现在的代码发上来

  1. #include<stdio.h>
  2. int Find(char *pname[], int n, char x[]);
  3. int main()
  4. {
  5.     char *pname[30];
  6.     char x;
  7.     int i, n, flag;

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

  10.     for (i = 0; i < n; i++);
  11.     {
  12.         scanf("%s", pname[i]);
  13.     }

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

  16.     flag = Find(pname, n, x);
  17.     if (flag)
  18.         printf("%s", x);
  19.     else
  20.         printf("Not find!");

  21.     return 0;
  22. }
  23. int Find(char *pname[], int n, char x[])
  24. {
  25.     int flag;
  26.     int i;

  27.     for (i = 0; i < n; i++)
  28.     {
  29.         if (pname[i]==x)
  30.         {
  31.             flag = 1;
  32.         }
  33.     }
  34.     return flag;
  35. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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, 2024-4-28 04:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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