一个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;
}
测试成功
三楼的应该有一个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;
}
自己看吧,错误vim都给你标出来了,这种错误不应该犯吧?
本帖最后由 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();即可 , 按照要求我没写上去 PC_ 发表于 2020-5-7 15:10
经gcc测试可以使用
补充:
我自己改也是有几个测试过不去... 人造人 发表于 2020-5-7 15:00
自己看吧,错误vim都给你标出来了,这种错误不应该犯吧?
那几个地方好改,关键程序有问题{:10_266:} 星海风驰 发表于 2020-5-7 15:19
那几个地方好改,关键程序有问题
把你现在的代码发上来
人造人 发表于 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;
}
sunrise085 发表于 2020-5-7 15:23
测试成功
三楼的应该有一个warning吧?
这个可以,测试没问题,我研究一下{:10_297:} 星海风驰 发表于 2020-5-7 15:29
这个可以,测试没问题,我研究一下
满意请给个最佳
原程序中字符串比较是不对滴。
页:
[1]