C语言大神求指点啊,帮忙改正以下商品查询函数search();

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言大神求指点啊,帮忙改正以下商品查询函数search();相关的知识,希望对你有一定的参考价值。

没有语法错误,运行查询编号的名称都无法达到预期的结果;格式神马的大神不要在意了,字数限制==
void search()

int i,n,m,k=0; FILE *fp; struct text stu[N],sup;//商品结构体
system("cls");//清屏 printf(" 商品信息查询 \n");
if((fp=fopen("c:\\file37.dat","r"))==NULL) printf("不能打开文件\n");
printf("\n\n ***************************************\n"); printf(" ** 查找商品 **\n");
printf(" ** 1.编号查找 **\n"); printf(" ** 2.名称查找 **\n");
printf(" ** 0.退出查询 **\n"); printf(" ***************************************\n");
printf("请输入选项:"); scanf("%d",&n); system("cls");//清屏
switch(n)
case 1: printf("请输入你所要查找的商品编号:"); scanf("%s",sup.num);
for(i=0;i<k;i++) if(sup.num==stu[i].num)
printf("\n 商品编号:%s\n 名称:%s\n 数量:%d\n",stu[i].num,stu[i].name,stu[i].n1,stu[i].n2);
else printf(" ** 查无此商品 **\n"); printf("输入任意键返回:\n"); getchar(); break;
case 2: printf("请输入你所要查找的商品名称:"); scanf("%s",sup.name);
for(i=0;i<k;i++) if(sup.num==stu[i].num)
printf("\n 商品编号:%s\n 名称:%s\n 数量:%d\n",stu[i].num,stu[i].name,stu[i].n1,stu[i].n2);
else printf("** 查无此商品 **\n"); printf("输入任意键返回:\n"); getchar(); break;
case 0: system("cls"); menu();
printf("\n\n***************************************\n"); printf(" ** **\n");
printf(" ** 1.继续查询 0.退出 **\n"); printf(" ** **\n");
printf(" ***************************************\n"); printf("请输入选项:");
scanf("%d",&m); if(m==1)//继续查询数据 search();
if(m==0) //跳出本循环
system("cls");//清屏
menu();//返回主菜单

第一个问题
你的num和name都是什么类型的?从你输入上看 应该是char *或者是char[]型的
这样就不能用==来判断 而应该用字符串比较函数strcmp
if(sup.num==stu[i].num) 改为 if(strcmp(sup.num,stu[i].num) == 0)

第二个问题
在按照name查询时 比较的还是num
这里
if(sup.num==stu[i].num) 应改为 if(strcmp(sup.name,stu[i].name) == 0)追问

我已经改正了,可是运行查询时输入编号或名称直接回到了主界面,这又是哪儿错了????

参考技术A 虽然你打了一大堆的printf就打算让我们给你改是不太现实滴。
但我还是提几点我看出来的你自己改吧,首先,我猜你是把数据存在file37.dat里的,但是你的操作有问题,你只是fOpen了,你打开文件了,你没有读数据fread啊,你没有把你读到的数据赋值给你想要的结构体中啊。你没有数据就去读,我想是会失败的。还有哦,你的switch里的break放在,每条case的最后呗,这样总觉得看起来爽一些。。。

建议多看一下文件操作部分

求Linux大神帮忙!!!!

文件pc.txt中保存了某班学生的数学成绩(第一项S*为学生学号,第二项数字为成绩),试编写一段shell程序完成以下操作:①按A(90-100)、B(80-89)、C(70-79)、D(60-69)、E(不及格)五档对成绩进行统计、计算后输出各个分数段的学生人数及总平均分;
②将各分数段的信息分别存入A、B、C、D、E五个文件中(在统计过程中动态完成)。
#!/bin/bash
numa=0
numb=0
numc=0
numd=0
nume=0
marka=0
markb=0
markc=0
markd=0
marke=0
while read line
do
mark=`echo $line | awk -F: 'print $2'`
if $mark >= 90
then numa=`expr $numa + 1`
marka=`expr $marka + $mark`
#else if $mark -ge 80 -a $mark -lt 90
#then numb=`expr $numb + 1`
#markb=`expr $markb + $mark`
#else if $mark -ge 70 -a $mark -lt 80
#then numc=`expr $numc + 1`
#markc=`expr $markc + $mark`
#else if $mark -ge 60 -a $mark -lt 70
#then numd=`expr $numd + 1`
#markd=`expr $markd + $mark`
#else nume=`expr $nume + 1`
#marke=`expr $marke + $mark`
#fi
#fi
#fi
fi
done < ./pc.txt
ah=`expr $marka \/ $numa`
#al=`expr $marka - $ah \* $numa`
bh=`expr $markb \/ $numb`
#bl=`expr $markb - $bh \* $numb`
ch=`expr $markc \/ $numc`
#cl=`expr $markc - $ch \* $numc`
dh=`expr $markd \/ $numd`
#dl=`expr $markd - $ch \* $numd`
eh=`expr $marke \/ $nume`
#el=`expr $marke - $ch \* $nume`
echo "A等学生有$numa人学生平均成绩: $ah"

echo "B等学生有$numb人学生平均成绩: $bh"

echo "C等学生有$numc人学生平均成绩: $ch"

echo "D等学生有$numd人学生平均成绩: $dh"

echo "E等学生有$nume人学生平均成绩: $eh"

是这么写么?判断成绩的语句不太对,应该怎么改啊?

#其中的if语句可以这么写。 
if [ $mark -ge 90 ]; then
    let numa+=1
elif [ $mark -ge 80 -a $mark -lt 90 ]; then
    let numb+=1
elif [ $mark -ge 70 -a $mark -lt 80 ]; then
    let numc+=1
elif [ $mark -ge 60 -a $mark -lt 70 ]; then 
    let numd+=1
else
    let nume+=1
fi

追问

还有“将各分数段的信息分别存入A、B、C、D、E五个文件中(在统计过程中动态完成)。”这个呢???
还有怎么能把代码在网页上显示成这样而不是普通格式的文本???

追答

分段存入文件,就是在各个if分支中用输出重定向。
比如,第一个if分支中,echo "$line" >>A
网页我不懂,第二个问题回答不了。

参考技术A 问题出在这个%c上,并不是所有的数字都有对应的ascii的,有些没有当然是乱码了,另外还和你terminal的lang环境变量,语言和字符编码是对应关系的,这都影响解码。
是否可以解决您的问题?

以上是关于C语言大神求指点啊,帮忙改正以下商品查询函数search();的主要内容,如果未能解决你的问题,请参考以下文章

C语言实验题 求大神指点

Navicat for MySQL怎么破解啊?急求。大神指点

C语言,数组输入遇到问题求大神指教:哪里错了,如何改正,为啥会出现这种情况?

求C语言高手帮忙。

C语言popen函数编译(连接)的时候总说有一个error(错误),找不到原因求大神帮忙TAT

simulink里关于正弦函数的求导,一阶,二阶求导,为啥结果有突变?而且二阶导完全不对?求大神帮忙啊!