一个c语言程序,自己写的一直有bug解决不掉,求大神给一个,虽然c语言入门很简单pdf.

c语言新手弄了一个下午没整明白。请大神解决一个链表的bug!_百度知道
c语言新手弄了一个下午没整明白。请大神解决一个链表的bug!
#include&stdio.h&#include&stdlib.h&#define MAS (STUDENT) malloc (sizeof (STUDENT))typedef struct stu *STUDENT;typedef struct stu {char name[20];STUDENT} STU;STUDENT addstudent(STUDENTtop){STUDENTnp,p,p1;np=MAS;p1=p=np-&next=NULL;printf(请&输入学缉单光竿叱放癸虱含僵生学号&);scanf(&%d&,&np-&num);printf(&请输入学生姓名&)scanf(&%s&,np-&name);if(top==NULL)top=else {while(p!=NULL){p1=p;p=p-&}p1-&next=}}void stuprint(STUDENT top){STUDENT
n1;for(n1=n1!=NULL;n1=n1-&next)printf(&%d %s\n&,n1-&num,n1-&name);}main(){int a=1;STUDENT top=NULL;while(a){top=addstudent(top);printf(&输入0结束&); scanf(&%d&,&a);}stuprint(top);}设想是将学生信息依次添加到链表当中,然后逐个打印,应该是比较简单的东西,但是为什么还是会出错,新手真的要崩溃了- -
提问者采纳
LNode *CreateList(){LNode *p,*q,*h;//程序段填空,创建单链表h,即表头指针为h,可以用头插法或者尾插法来实现 h = (LNode *)malloc(sizeof(LNode));//创建头结点 h-&next=NULL;//使头结点的指针为空 p=h;//把头结点复制一份 printf(&请输入要插入的数据按0结束\n&);scanf(&%d&,&x);//输入要插入的元素的值 while(x!=0)//输入0结束 {q = (LNode*)malloc(sizeof(LNode));//创建一个新结点 q-&data=x;//将结点的数据域复制 q缉单光竿叱放癸虱含僵-&next=NULL;//把该结点的下一个指针指向空 p-&next=q;//与头结点连上 p=q;//p结点向前移动一次为下一次插入作准备 scanf(&%d&,&x);//再次输入x的值 }}我发你一个对的,你的代码我看了好久,我觉得创建链表是时候最好不要用递归的方式!
提问者评价
谢谢了,你写的很详细,看出其中的用心,原来的代码在第三行申明的时候出错了。我后来才发现的,真麻烦你了
来自团队:
其他类似问题
为您推荐:
链表的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一个c语言程序,自己写的一直有bug解决不掉,求大神给一个,虽然很简单._百度知道
一个c语言程序,自己写的一直有bug解决不掉,求大神给一个,虽然很简单.
//a.com/zhidao/wh%3D600%2C800/sign=533ed0a7cd8065387bbfac15a7ed8d7c/0bd162d9f2dc3d0c3c3&nbsp.jpg" esrc="http.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="/zhidao/pic/item/0bd162d9f2dc3d0c3c3.<a href="http.hiphotos://a.baidu:///zhidao/wh%3D450%2C600/sign=510ef704a644ad342eea8f83ebd162d9f2dc3d0c3c3.hiphotos
提问者采纳
count++;;猜的数
if ( number == randValue ) {
printf(&%d&
}while (number,time是时间函数;设随机数种子;);太大,游戏结束;请输入您猜的数:%d&&#47srand(time);/10);
if (number&/
scanf(&quot, count);取随机数1~100
int count=0;//);randValue) {
printf(&);
}else if (number&猜数次数
int number=-1, randValue);/randValue){
printf(&太小:&quot!您猜了%d次&, &number);很遗憾!&quot!&quot,正确答案,忘记怎么写的了
int randValue = rand()%100 + 1;恭喜您猜中了;;
printf(&&#47!=randValue || count&&#47
我把bug解决了,不过还是谢谢了,你最快回答财富值就给你了
提问者评价
太给力了,你的回答完美的解决了我的问题!
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您的位置: >>
  本文来自,很有意思,分享给大家。我相信这样的 bug,就算你是高手你也会犯的,你来看看作者犯的这个Bug吧。
  首先,作者想用一段程序来创建一个文件,如果有文件名的话,就创建真正的文件,如果没有的话,就调用
创建临时文件。他这段程序就是 HTTP 下载的C程序。code==200 就是 HTTP 的返回码。
elseif (code ==&200) { // Downloading whole file & & /* Write new file (plus allow reading once we finish) */& & g = fname ? fopen(fname, "w+") : tmpfile();}
  但是这个程序,只能在 Unix/Linux 下工作,因为 Microsoft 的&tmpfile() 的实现居然选择了 C:\ 作为临时文件的存放目录,这对于那些没有管理员权限的人来说就出大问题了,在 Windows 7 下,就算你有管理员权限也会有问题。所以,上面的程序在 Windows 平台下需要用不同的方式来处理,不能直接使用 Windows 的 tmpfile() 函数。
  于是作者就先把这个问题记下来,在注释中写下了FIXME:
elseif (code ==&200) { // Downloading whole file & & /* Write new file (plus allow reading once we finish) */ & & // FIXME Win32 native version fails here because & & // Microsoft's version of tmpfile() creates the file in C:\& & g = fname ? fopen(fname, "w+") : tmpfile();}
  然后,作者觉得需要写一个跨平台的编译:
FILE * tmpfile ( void ) {& & #ifndef _WIN32 & & return tmpfile();& & #else & & //code for W& & #endif}
  然后,作者觉得这样实现很不好,会发现名字冲突,因为这样一来这个函数太难看了。于是他重构了一下他的代码写一个自己实现的 tmpfile() & w32_tmpfile,然后,在Windows 下用宏定义来重命名这个函数为 tmpfile()。(陈皓注:这种用法是比较标准的跨平台代码的写法)
#ifdef _WIN32 #define tmpfile w32_tmpfile#endifFILE * w32_tmpfile ( void ) { & &//code for W}  
  搞定!编译程序,运行。靠!居然没有调用到我的 w32_tmpfile(),什么问题?调试,单步跟踪,果然没有调用到!难道是问号表达式有问题?改成 if & else 语句,好了!
if(NULL != fname) {& & g = fopen(fname, "w+");} else {& & g = tmpfile();}
  问号表达式不应该有问题吧,难道我们的宏对问号表达式不起作用,这难道是编译器的预编译的一个bug?作者怀疑到。
  现在我们把所有的代码连在一起看,并比较一下:
  能正常工作的代码
#ifdef _WIN32
define tmpfile w32_tmpfile
FILE * w32_tmpfile ( void ) {
//code for W
else if (code == 200) {
// Downloading whole file
/* Write new file (plus allow reading once we finish) */
// FIXME Win32 native version fails here because
// Microsoft's version of tmpfile() creates the file in C:\
//g = fname ? fopen(fname, "w+") : tmpfile();
if(NULL != fname) {
g = fopen(fname, "w+");
g = tmpfile();
  不能正常工作的代码
#ifdef _WIN32
define tmpfile w32_tmpfile
FILE * w32_tmpfile ( void ) {
//code for W
else if (code == 200) {
// Downloading whole file
/* Write new file (plus allow reading once we finish) */
// FIXME Win32 native version fails here because
// Microsoft's version of tmpfile() creates the file in C:\
g = fname ? fopen(fname, "w+") : tmpfile();
  也许你在一开始就看到了这个bug,但是作者没有。所有的问题都出在注释上:
/* Write new file (plus allow reading once we finish) */// FIXME Win32 native version fails here because// Microsoft's version of tmpfile() creates the file in C:\ 
  你看到了最后那个 C:\ 吗?在C中,\ 代表此行没有结束,于是,后面的代码也成了注释。这就是这个bug的真正原因!
  而之所以改成if-else能工作的原因是因为作者注释了老的问号表达式的代码,所以,那段能工作的代码成了:
/* Write new file (plus allow reading once we finish) */
// FIXME Win32 native version fails here because Microsoft's version of tmpfile() creates the file in C: //g = fname ? fopen(fname, "w+") : tmpfile();
if(NULL != fname) {
g = fopen(fname, "w+");
g = tmpfile();
  我相信,当作者找到这个问题的原因后,一定会骂一句妈的!我也相信,这个 bug 花费了作者很多时间!
  最后,我也 share 一个我以前犯的一个错。
  我有一个小函数,需要传入一个 int* pInt 的类型,然后我需要在我的代码里把这个 int* pInt 作除数。于是我的代码成了下面的这个样子:
float result = num/*pI&.
/* &some comments */
-x&10 ? f(result):f(-result);
  因为我在我当时用vi编写代码,所以没有语法高亮,而我的程序都编译通过了,但是却出现了很奇怪的事。我也不知道,用gdb调式的时候,发现有些语句直接就过了。这个问题让我花了很多时间,最后发现问题原来是没有空格导致的,TNND,下面我用代码高亮的插件来显示上面的代码,
float result = num/*pI
some comments */
-x&10 ? f(result):f(-result);
  Holly Shit! 我的代码成了:
float result = num-x&10 ? f(result):f(-result);
  妈的!我的这个错误在愚蠢程度上和上面那个作者出的错误有一拼。
程序人生热门文章
程序人生最新文章写给C语言生手的话_imooo软件程序bug解决方案
写给C语言生手的话
写给C语言新手的话&
首先声明啊,写这个是因为一些加我QQ的朋友问我学习经验,我才写的。
另外,如果是二级党,那么请用谭浩强老师的书。然后你就可以不用看了。倒不是有偏见,而是我写的这个东西,根本不是为了考试,而是为了和新手交流怎么学习C语言,怎样编写代码的。
【如果要看,最后三条那是一定要看的。】
如果不是二级党,那么,开始:
我们做什么事情都是有目的的,比如说我,学习编程的最终目的就是从事软件行业。这个目的要十分明确,不能说想学编程,那么学编程的目的呢?当然如果仅仅是兴趣,我觉得这就是最光明正大的目的。
有一个学习目标
还是以我自己为例,我刚开始学C语言的时候,就想要写一个学生信息管理系统,于是在我学习C语言八个月之后,终于完全有能力写出这个小项目,对于以后从事软件开发总算迈出了一小步。
读者应该明白了,我说的这个目标就是说你在学完C语言之后,要能写出一个东西,它可能是学生信息管理系统,可能是一个小游戏,还可能是一个外挂。总之你要有一个目标,这个目标不一定要多高,但一定要是你能力的体现。
要有的学习工具和环境
学习是讲究环境的,还有一句话说:“工欲善其事,必先利其器。”
我觉得学习C的话,要有这么几个条件:
1、&&&&&&&&
不一定能上网,但一定要有,不然天天用C4(可以在安卓手机上写C语言程序的东西)搞,累死个人。
如果是笔记本的话,最好买一个外置的键盘。我不知道是不是所有写代码的人敲键盘的时候都很大力,反正我是,尤其是回车键。不然你每次都那么大力敲,本子用不了几天不就敲碎了。
2、&&&&&&&&
C Primer plus
The C programming language
C语言程序设计现代方法
这三本书随便选一本。至于这三者之间的差异,我就不说了,C语言新手可以真么选择:
有过其他语言基础,比如VB ,javascript,actionsript之类的,可以看第一本
之前有学过一点C语言的同学,可以选第二本
之前没有任何基础的,可以选第三本
当然,这只是我的理解。其实对于新手来说,学习语法的话,这三本哪一本都可以。
3、&&&&&&&&
最好有一个固定的地方和学习时间表
在自己习惯的地方,效率应该会高一点。
至于学习时间表怎么安排,我就不说了。。。我自己的时间都安排不好的,如果你自己是那种很会安排时间的人,那么你一定要坚定的保持这个巨好无比的习惯。
4、&&&&&&&&
要保存你的代码
也许新手觉得我才刚开始学习,那么我最开始写的代码肯定错误百出,甚至可能不堪入目,为什么还要保存?
每个高手都是从新手过来的,高手第一次写代码的时候,也许还不如你呢。
保存自己所有的代码,以后自己能力提上去了,就可以看出自己的成长,也可以看出自己还有哪些坏习惯没有改掉,又可以作为自己的宝贵回忆,总之好处多多。
我以前把代码都保存到电脑上了,后来重做系统的时候,竟然一个不小心,忘了备份,结果就悲剧了。。。于是我学会使用CSDN博客,反正博客可以写很多,再不行就打包保存到网盘上。总之作为一个程序员,备份那是相当滴重要。
5、&&&&&&&&
善于利用百度,google之类的网站
不是每个人都可以自己搞定所有的问题,所以当你遇到自己搞不定的问题的时候,完全可以询问好友,老师,同学,也可以度娘之,google之,搞不定问题并不可耻,如果搞不定还不承认,自己闷头瞎搞,那就是愚蠢了,所以我们不仅要不耻下问,还要会不耻上问。
学会坚持,更要学会休息
有一个伟人说过:“身体是革命的本钱。”
编程本身就是一个强脑力加强体力的工作,所以身体就显得尤为重要。
如果你无论如何都写不出代码,无论如何都看不懂指针,无论如何都搞不定栈和队列,那么类&#20284;于这种情况,就远离电脑,游戏神马的也不要搞,就直接关掉电脑,好的就这样,然后离开去打球,去溜达,去勾搭小姑娘等等能让你放松的活动。
至于坚持,坚持的越久的人,收获的越多,看的风景也就越多。
编程毫无疑问是一个枯燥,乏味,劳累,无趣……的工作,对于那些以编程为乐的人,或许不觉得,对于不那么喜欢编程的程序员,就要学会坚持了。我相信每一次终于搞定一个程序之后,那种成就感,可以冲淡一切疲惫。
关于编译器那点事儿(可以不看)
可能你的书上推荐的是VC6.0,可能是Tubor C,也有可能是我给你推荐CodeBlocks,还有可能是你自己用C-Free,其实用哪个无所谓,对于刚开始学C的新手来说,学会&
C的规则是最重要的。
例如说我,刚开始电脑是WIN7的,VC总是不能用,于是搞了一个C-Free,后来换成XP系统,开始用VC,再后来感觉CodeBlocks比较好,于是又换了。
CodeBlocks对于C99的支持比VC6要好,当然你用VS的话,也是可以的,因为VS加上助手,那简直碉爆了。
我现在是用UE写代码,安装了一个CodeBlocks,把环境变量配置好,然后在CMD里面用GCC命令编译运行程序,因为这样生成的中间文件少。
再有就是,不管你是用IDE也好,用代码编辑器也好,最好把窗口的背景色设置成沙绿色,因为白色背景实在是很刺&#30524;。至于怎么设置,请度娘之。用Linux的同学,就自己想想办法吧,你都会用Linux了,这个应该难不倒你。
语法学习经验
怎样学习语法,这是个问题,如果之前学过VB之类的也许还好一点,但是对于没有任何编程基础的人,也许刚开始学习语法的时候,会遇到各种问题,这里给出我的经验:
首先,不要过度追求细节。新手学C语言这个事儿,过度追求细节没有好处。大致理解,不求甚解也就行了,毕竟刚开始学,大致能明白怎么回事就行。就好像学习数学一样,你也许一个概念也背不出来,但是你明白原理的话,一样可以计算。
其次,语法记不住没有关系。曾记得我刚开始用指针那会儿,不看书,都不知道指针是啥玩意儿。所以,你会运用语法就行,不用死记硬背。
再次,遇到语法问题,不要纵容自己忽略,否则会养成错误认知,以后再想改就不好改了。
最后,如果你的英语很牛,那么你就看C语言标准吧,关于语法,没有比这个更好的东西了。
编写代码的经验
1、&&&&&&&&
代码风&#26684;清晰要比高效更重要
代码的风&#26684;是一个很大的问题。你要像写十四行诗一样写代码。
有很多新手可能会在一行代码里面写好几个语句,也许你觉得这样写起来很快,但是这样是不行的,用我的话说,那就是错误,而且是很严重的错误。如果让你在杂乱无章的代码里面找一个编译器检测不出来的错误,那么你会很辛苦。如果代码超过几百行(也许会有几千行),你的风&#26684;还是那么糟糕透顶的话,那简直是无法想像的事情。
推荐新手在有一定的能力之后,最晚也要在学会函数的时候,可以看看《C/C&#43;&#43;高质量代码》这本书,我现在的代码风&#26684;就是按照这本书写的,记得外国也有一本书是说代码风&#26684;的,具体名字忘了,可以自己查一下。
总之风&#26684;!风&#26684;!风&#26684;!风&#26684;!很重要!!巨重要!!无比重要!!!
2、&&&&&&&&
也许新手又会觉得我小题大做了,我自己写的代码难道我自己还不清楚么?写注释要一直切换输入法,会影响写代码的速度,一旦修改代码就要修改注释甚至重写注释,有的时候注释好难写……是的,写注释好累,写注释好麻烦,写注释好墨迹。但是以后工作以后,没有几个项目是自己一个人搞定的,如果你的代码一行注释都没有,那会对别人造成很大的困扰。如果你看自己几个月以前甚至是几年以前的代码,一行注释都没有,那看起来会相当辛苦。
注释可以帮助我们更好的理解代码,可以帮助我们更加快速的阅读代码,可以加快我们的思维速度,可以……总之好处太多了。
有一句话说:“每一个不写注释的程序员,***都想注释那么长。”,额,这句话请自己百度之。
3、&&&&&&&&
怎样修改错误代码
我们几乎天天遇到这种情况:我写的代码没有问题啊,为什么运行不正确?或者说编译器没有报错,为什么就是无法运行呢?
这是因为你的代码有错误,当然这是一句废话。。。。
如何修改自己错误的代码?
如何快速的找到编译器都找不到的错误?
如何尽量的少写错误的代码?
其实想要减少错误,想要避免编译器检测不出来的错误,是很简单的事情,那就是调试,当然我反正是不会调试,如果你会的话,请留下你的QQ号码,或者博客地址,或者其他联系方式,电话号码也是可以的,只要你能教会我调试。
我一般都会在关键变量附近添加printf语句,这样可以随时监测变量的变化情况。
我一般会先写小规模的测试代码。比如要你输出50000以内的素数,我会先输出100以内的,如果有错误的话,这样不是很容易找?所以对于数据规模比较大的问题,可以先缩小规模,然后搞一个通用代码,然后扩大数据规模。
我一般会把问题分成几个模块,然后一个一个的搞定。比如输入两个整数,然后输出最小公倍数和最大公倍数。
我会先完成公倍数的功能,
再把公倍数的代码注释掉,
再完成公约数的功能,
最后去掉注释,最后测试。
对于要求比较多的问题,可以一步一步来,不要着急,饭要一口一口的吃,代码要一点一点的写。
4、&&&&&&&&
写不出来代码怎么办?
其实不仅仅是新手,每个程序员都有写不出代码的时候,那种摔鼠标、砸键盘就是写不出代码感觉太憋屈了,太难受了,但是我们写不出来有什么办法?写不出来就不要谢了嘛。。。。。
如果写不出代码,可能是那个问题对你来说难度太高了,放弃也是一种聪明。
如果写不出代码,可能是你的思路本身就是错误的,应该重新设计解体思路。
如果写不出代码,可能是你没有查阅足够的资料,比如求最小公倍数。最小公倍数=两数之乘积 &/
最大公约数。你连这个东西都没有查到,你写不出来能怨谁?
如果写不出代码,可能是你太累了,休息一下。
如果写不出代码,可能是你应该参考别人的代码的时候了,其实照抄别人的代码有时候也是极好的。
如果写不出代码,可能是你根本没有充分的分析问题,一上来就写代码,没有足够的规划,写代码当然是一团糟。
写不出代码的原因很多,但是这个时候的心态却就那么相&#20284;。写不出代码,要仔细考虑原因,是不是自己太着急了?是不是自己搞错方向了?是不是这个问题本身就有问题呢?是不是自己耻于请教别人呢?是不是自己懒得查资料呢?总之这个时候,一定要Hold住,不要因为写不出代码就真的摔鼠标砸键盘了,整坏了,要花钱滴。。。。
写不出代码,是程序员经常遇到的事情,不必往心里去,也许睡一觉,梦里就写出来了呢?
5、&&&&&&&&
怎样写出很高级的代码?
新手看高手的代码,总觉得好简洁,好厉害!
高手看大神的代码,总觉得我靠,我怎么看不懂,但是运行起来好快啊!
这个东西是写给新手看的,所以怎样写出高效率,巨简洁的代码,要在具有一定的水平之后再讨论。对于新手来说,能够解决问题就可以了,不必对自己的要求太苛刻。
怎样取舍?
我认为新手学会下面的东西就可以了:
1、&&&&&&&&
新手只需要掌握:int,float,double,char,字符串就可以了,只要会定义,会使用,就行,不用追求int类型占用几个字节,最大最小&#20540;是多少什么的,因为没有必要。
2、&&&&&&&&
会&#43;,-,*,/,%,&&,||,=,==!,就行了
3、&&&&&&&&
三种流程控制
4、&&&&&&&&
数组的基本用法
5、&&&&&&&&
字符串的运用和处理
字符串处理是一个大问题,不过新手只需要学会定义字符串数组,会基本的字符串处理函数,例如复制,比较,查找是否含有某个字符就行了。至于更加复杂的处理,等你学会C的语法,具有一定的能力之后再说吧。
6、&&&&&&&&
自己定义函数,并且会运用函数解决问题
也许新手会觉得,我可以把所有的代码都写在主函数里面,这样多好?不用定义函数,好省事儿。
其实这是不对的,用我的话说,那就是错误,而且是不可以犯的错误。虽然刚开始的时候,那些小问题,比如输出菱形,求公约数,输出佩纳契数列什么的,都可以把代码全部写到主函数里面,但是这并不是真正的C语言程序,如果没有自定义函数,那还是C吗?
新手只要能把这些小问题用自定义函数搞定就行了。不是那种把输入输出都写在一个函数里面,然后在主函数里面调用函数,那是不行的。要学会输入输出有主函数处理,中间的处理过程,交给自定义函数。
C语言是面向过程的语言,如果不会自定义函数,不会设计函数,那就是没有学会C语言。
7、&&&&&&&&
指针学起来好辛苦啊!指针规则好多啊!指针的错误好难找啊!
&&&&&&&&&& 是的,指针很难搞,但是学不会指针的人,就没有学过C语言。
&&&&&&&&&& 在上面那条里,我提到的问题,可以用函数加指针搞定就行了。
8、&&&&&&&&
C的库函数那么那么多,我怎么记得住?
我可以明确的告诉你,你是不可能全部记住的。如果你真的去背了,那你别学C了,去参加记忆大赛吧。
我们只需要记住常用几个就行了。比如printf,scanf,pow,等,新手能够运用库函数解决问题就行了。
9、&&&&&&&&
C的其他内容
比如文件,比如宏,比如多文件编译,等等这些问题,可以等你需要加深学习的时候再搞
几个小程序
1、&&&&&&&&
Hello World
这个程序,必须要亲自敲一边,并且运行成功,没有理由,那就是必须滴
2、&&&&&&&&
输入两个数字,求他们的和或者乘积
这是看你有没有学会输入输出函数和几个最近本的运算符
3、&&&&&&&&
解一元二次方程
这是看你有没有学会选择控制语句和对输入输出处理的提高
4、&&&&&&&&
输出配伯纳契数列或者输出菱形图案
这是看你有没有掌握循环控制语句
5、&&&&&&&&
自己写字符串复制函数或者求长度函数等
这是看你对于字符串数组的理解,以及自定义函数处理问题的能力
基本上也就这些吧,一不小心没有收住,如果你看完了,新手有问题可以留言提问,高手感觉哪里有问题,请不要客气的指出来,我是很认真的说。
- 安垠泳 - 曾子航 - 郑磊 - 何怀宏 - 孙天慧 - 君天 - 董思阳 - 童伟宏 - 王汉武 - 那鸿 - 猫眼娜娜 - 花迟暮 - 薇哂 - 赵凝 - 三十c语言课设bug求大神解决!已疯_百度知道
c语言课设bug求大神解决!已疯
scanf(& }}void sign(){n&quot!&#92;);u&%s&).time);4;
} while(n&&#47;
char num[20];printf(&quot:&n&&#47!&#92;&#47;%s&search();;
case 1;).num);0).跑步签到,n;请输入次数.查询&#92;n&n&quot.h&printf(&quot.name);&#47,stu[u],stu[w];%d&#92;1;&#47; printf(&quot.跑步签到&#92;姓名&#92;void menu().time+1; }; printf(&}void menu(){printf(&quot,请重新确认后再次输入;;n&quot: printf(&quot!&#92;printf(&quot.
for(w=0;%d&;;2,&x);t&n& scanf(&n&&#47;);printf(&quot,stu[u];w&lt.查询void save();); printf(&n&请输入要选择的菜单;3;).学生名单输入&#92;printf(&):printf(&quot.退出系统;
printf(&quot: printf(&欢迎进入跑步签到系统&#92;u++) {
printf(&quot.学生名单输入void sign();
} *stu[w];n&quot,x)==0);;&#47;4;%s&#92;).跑步签到void search().退出系统&#92,stu[w];请输入你想查找的学生的学号;create().name),stu[w];0;输出主菜单void create(););n& printf(&2;
case 3;1;;%d&t&int main(){
menu();w++) {
if(strcmp(stu[w];2: printf(&}void search(){ int w,x)==0)%s&;);1;);%s&#92:&#92;struct Student {
char name[20].num);sign().学生名单输入&#92; return 0;n& scanf(&quot.查询;请输入打卡的学生的学号;);&#47;
int time[3];t&#92;n&3;t次数&#92; } printf(&请输入学号;t学号&#92,&x);
scanf(&quot:&quot:&&#47;0;);保存
case 2;*void save(){ FILE *);%s&);n&quot.time=*stu[w]; char x!&#92;struct Student stu[20].num,&n),stu[u];);w++)
if(strcmp(stu[w];
for(w=0: printf(&请输入学生姓名;#include&4;w&lt:&}&#47;
case 0;您输入的选项不存在;);
printf(&quot.h&gt:&void create(){ for(u=0.time);3;#include&}*&#47; printf(&quot
提问者采纳
\n&&nbsp:&}*/void&&&u&&&;&&w&%s&quot.退出系统\n&&&&%d&quot,&&&&&{&&Student{&&&&&&0);&sign();&&&struct&&&&&&&case&;&printf(&&&签到成功\n&{&&&stu[20];&nbsp!\n&&&&&&&&create(){&menu(){&&}&&&&nbsp.name);&&w;&sign():&);&;int&nbsp.查询\n&&printf(&&&4;&&&%s&&&&&stu[w];char&&nbsp,stu[w];scanf(&&&&%s\t&quot.查询void&&search();%d\n&&&}&create();printf(&printf(&);&menu();#include&&&&nbsp修改了一下;printf(&&nbsp!\n&&save():&quot,n;&&int&&nbsp.跑步签到;&&&for(w=0;&nbsp.h&;1;&&3;&i;&&printf(&&&&w&struct&&&scanf(&&w;&&&do{&char&printf(&{&&nbsp.学生名单输入\n&&&&&&&&nbsp.跑步签到\n&&&&););void&&&scanf(&while(n&&&nbsp.跑步签到void&&&&&&name[20];;&search(){&printf(&*&nbsp:printf(&&&&&create();&&&&);&&&请输入打卡的学生的学号;x);&&&&&}}void&printf(&printf(&quot:&nbsp:\n&quot:&);}void&&&search();&&printf(&&&&x[20];&//3;);char&printf(&n);}void&nbsp.time);for(w=0;num[20];&&&2;&&&&&nbsp:&&&&&).num);4;&&nbsp,stu[w];if(strcmp(stu[w];&&);&nbsp.&&&&&&&&case&&int&&&//输出主菜单void&&x);&3;}/*void&0;&&&&&&printf(&int&&&&&&&nbsp.h&gt.学生名单输入void&&nbsp,&stu[u];&nbsp.name).time++;w++)&&3;&&;;&&&&sign(){&&int&&&&&nbsp:&{&);&u;main(){&&2;0;&请输入你想查找的学生的学号;&&char&&nbsp.退出系统;&%d&&&1;scanf(&&&scanf(&printf(&&&&&&&);4;&&&}&&&&););&&&&&&save(){&&&&};&&0;&for(u=0;&}&printf(&&&&&printf(&姓名\t学号\t次数\t\n&);%s&&case&):&nbsp.查询;&nbsp.//保存int&&u++)&&&0;//2;&nbsp,stu[u];&&&&&&&&;&&&\n欢迎进入跑步签到系统\n&&nbsp,&&printf(&&1;&nbsp.学生名单输入\n&&&nbsp,stu[u];&);您输入的选项不存在;&&switch(n)&FILE&&&&case&printf(&&&nbsp!\n&&&&nbsp,x)==0)&&&menu();&&&&&&);请输入学号;请输入学生姓名,x)==0)&&&&nbsp:&&&&&return&x[20];&amp.num);default,请重新确认后再次输入;&scanf(&请输入次数;&if(strcmp(stu[w];%s\t&&&&&请输入要选择的菜单;Student&nbsp。#include&&&&;&);&&w++)&&%s&&&&&&printf(&//1;&printf(&quot,stu[w].time);&nbsp,&&&&&&&&2;&&nbsp,在vs2010编译环境下OK
输入信息时输入一个学生的信息后就不能继续输入了
重新拷贝一下试一试。测试时候,我修改了循环参数。已经改回去了。
提问者评价
谢谢大神啊,非常感谢
来自团队:
其他类似问题
为您推荐:
其他2条回答
);&nbsp.跑步签到void&&Student&&nbsp.time+1;search(){&nbsp,stu[w];%s&quot:&printf(&//scanf(&4;1;%d&&\n请输入学生姓名;w&} &}&//保存int&num[20];u&&&nbsp:\n&//char&switch(n)&nbsp,&amp.time);save(){&*/ &&nbsp,x)==0)&0;//scanf(&&w;\n欢迎进入跑步签到系统\n&&\n请输入打卡的学生的学号;//char&n),x)==0)&&&&}/*&
printf(&quot.num);if(stu[w];&&nbsp!\n&if(strcmp(stu[w];/*&//scanf(&;create();/*&search()!\n&%s&&&x);for(w=0;&stu[w];%d&;printf(&scanf(&&&);menu(){printf(&quot:&&&x;);u;);&printf(&printf(&&&%d&quot.num==x)
&printf(&quot,stu[u].查询;&\n请输入你想查找的学生的学号;.time);&),stu[w];);time[3].name);&char&nbsp:printf(&%s&quot.name);2;printf(&&stu[u];w;&nbsp.name););printf(&quot:&int&}/*void&x);&default,&(stu[u];&;struct&0;);//char&&2;&&printf(&&printf(&%s\t&quot.time=stu[w];&&;2;&nbsp,&&sign(){&w++)&姓名\t学号\t次数\t\n&sign();
printf(&;int&scanf(&&case&printf(&int&);x;;scanf(&quot.%s\t&quot,& &&printf(&.跑步签到\n&
//printf(&u++)&&&&for(u=0;printf(&menu();&}*/void&;3;FILE&0;//输出主菜单void&&nbsp:&%s&%d\n&#include&int&&nbsp.h&{
&{&nbsp,stu[w];}&&case&&}void&);1;int&return&&&do{&printf(&quot.h&gt.num==x) &scanf(&w&&nbsp,请重新确认后再次输入;x;stu[20];&&&0);printf(&quot,&&0;&);&};):&quot.num));&nbsp.num).查询\n&quot:&nbsp,stu[w];main(){&nbsp.跑步签到;for(w=0;&&nbsp:&{ &case&;&struct&请输入次数;x););{&nbsp,stu[u];int&//&nbsp.退出系统\n&quot:&create(){&nbsp,n;{&}void&if(strcmp(stu[w];);void&;);&printf(&
printf(&;;;name[20];&scanf(&quot.退出系统;;//3;%s\t&printf(&;menu();\n1;x;4;&printf(&quot,&);&if(stu[w];&&printf(&{ &nbsp.time=*stu[w];%d&int&&&nbsp.学生名单输入\n&sign();&nbsp,stu[w];*请输入学号;&&Student&姓名\t学号\t次数\t\n&//2;3;3;&4;create().学生名单输入void&printf(&&//1.time),stu[w];&*/ &%d\n&quot.num);while(n&gt!\n&w++)&&请输入要选择的菜单;):&&save();&x);%d\t&i.time+1.num);scanf(&).查询void&nbsp,stu[w];&&&%s\t&&search();//*stu[w]!\n&quot.int&&int&&nbsp.学生名单输入\n&&nbsp,&}&&case&&%d&您输入的选项不存在;&}}void&nbsp#include&lt
感谢,谢谢
请问具体是什么bug啊?
运行程序的时候签到会闪退,然后查询次数会出现一个很大的数,和我自己输入的数不一样
*stu[w].time=*stu[w].time+1这句话为什么用间接访问呢,并没有指针啊还有这个time为什么定义成数组呢?直接给数组加1当然不行
感谢,谢谢大神哈
包皮手术的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言大神 的文章

 

随机推荐