保洁工具使用培训:C语言结构赋值问题。我这个程序那里出错?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 03:50:48
为什么运行这句puts("Input Age:");这后,我输入一个整型数,程序会自动跳到打印了。为什么?我还有一个地址未输入?请各位教教小弟。

#include "stdio.h"
#include "conio.h"
main()
{
struct studen
{char stname[30];
char stsex[10];
int stold;
char stadd[30];}stsave;
puts("Input Nmae:"); gets(stsave.stname);
puts("Input Sex:"); gets(stsave.stsex);
puts("Input Age:"); scanf("%d",&stsave.stadd);
puts("Input Address:"); gets(stsave.stadd);
puts("_________________________________");
printf("Studen name : %s \n",stsave.stname);
printf("studen sex : %s \n",stsave.stsex);
printf("studen old : %s \n",stsave.stold);
printf("studen address : %s \n",stsave.stadd);
getch();
}

#include "stdio.h"
#include "conio.h"
main()
{
struct studen
{char stname[30];
char stsex[10];
int stold;
char stadd[30];}stsave;
puts("Input Nmae:"); gets(stsave.stname);
puts("Input Sex:"); gets(stsave.stsex);
puts("Input Age:"); scanf("%d",&stsave.stold); /* 是stold */

gets(NULL); /* 加一行这个 */

puts("Input Address:"); gets(stsave.stadd);
puts("_________________________________");
printf("Studen name : %s \n",stsave.stname);
printf("studen sex : %s \n",stsave.stsex);
printf("studen old : %d \n",stsave.stold); /* 是 %d */
printf("studen address : %s \n",stsave.stadd);
getch();
}

你程序中有一点笔误我给你改过来了。
是这样的,前面 scanf 读取 %d 的时候,是需要回车去结束读取的,但是这个回车是保留在缓冲区内的,下一次读 gets 的时候,就会读到这个回车,结果就不等用户输入就读了一个空字符串。我们加一行 gets 就可以把这个回车先读掉,然后就可以等待用户输入了。

--------------------------------------------------------------------------------编程语言的选择VBBasic有40年的历史了,而且至今仍然散发出令人神气息,足见其生命力之强大了,应该说VB是一个Basic开发工具但是VB的语法结构却与传统Basic不大一样,尤其是在.net中VB更是“脱胎换骨”语法结构与传统Basic差距更大了。所以说VB是个语言应该是不过分。由于VB6.0及其以前的VB与VB.net有很大的不同,所以本文分开讨论。先说VB6.0及其以前的版本(以下简称VB6)。可以说VB6的出现让从DOS过度而来的程序员人惊讶的发现“原来Windows应用程序可以这样编啊”。随着时代的发展VB6的缺点日益暴露出来由于语法结构对面向对象的支持不好。(其实VB6全部对面向对象的支持都不不好,但根源应该是语法结构的支持)造成了VB6不适合开发大程序,即使借助于COM(在VB中就是ActiveX和DLL)可以开发出来相当不错的程序但其开发时的复杂让人忘而止步。更可怕的是由于网络的飞速发展,分布式,Web服务开发越来越重要,而VB竟然只能借助于复杂的COM才能实现分布式,Web服务开发。在这时微软推出了.Net,VB在.Net的帮助下威力有了惊人的提高。现在说VB.Net,上面说过VB.Net可以说是对VB进行了“脱胎换骨”的改进。语法结构上很好的支持面向对象,而且借助与.Net可以开发Web服务更能跨平台的运行。由于.Net中的公共语言运行环境和公共语言类型VB可以与.Net中的其它语言无缝的配合。说了这么多也许你觉得“迷糊了”,其实我写这么多只是想让你对VB有比较客观的认识。如果你想“玩”编程那么用VB应该没错的,它的语法简明而且易懂,如果你是一个新手而且想吃编程这碗饭更想依靠.Net这个“大山”,那么我建议你去学VB.Net(或者C#,后者介绍原因),如果你是一个老“VB”而且想投入.Net中,那么学VB.Net应该是你最好的选择了。C#与JAVA我之所以把它们放到一块是因为,微软的C#就是冲着JAVA来的,两者惊人的相似。C#--.Net第一语言与Delphi同出一人之手,可以说它是.Net中最好的语言,它简直是为.Net量身定做的。其语法结构有几分C/C 的优点,更有几分VB的简单明了,而且它不会背负任何兼容性的问题--它是全新的。它对面向对象的支持和 JAVA一样的“纯”。唯一不如JAVA的就是由于推出的比JAVA晚,所以企业开发框架没有JAVA的多,而且不太成熟。所以JAVA依然是企业开发中的“老大”。JAVA,可以说是众人厂家包括开源社区与微软.Net对抗的工具,其跨平台的物性比.Net上所有语言都要好,而且JAVA成熟的技术和框架很多,可以避免了很多“发明轮子”的劳动。两者对Web服务开发上是不分上下的。如果你要依靠.Net而且是个新手学习C#就很不错的,同样学习VB也是很不错的,因为它们的学习曲线似乎不分高低。如果你想依靠JAVA平台,那么JAVA是你唯一的选择了。Object Pascal可以说它是一个比较严谨的语言,严谨的让我这样的人有点烦了。其大量的冗余的begin……end让我很是受不了,而且我也不太习惯":=''去赋值,更让我受不了的是它的启动速度奇慢。好了,Delphi迷们恐怕生气了吧?但不能不承认以上几点是Delphi的缺点(我个人的意见)。其实Delphi是一个十分完美的语言,不但可以借助于VCL快速开发而且对面向对象的支持十分的好。对Web服务开发支持的同样优秀。所以如果你是一个认真的人,用Delphi吧。如果你是一个聪明的懒人也用Delphi(VCL可以帮你省很大力气)。C/C C语言和C 是两种不同的语言,它们相同的只是部分的语法结构[/font][font=''就是说长的看着一样。主要应用如嵌入式开发,实时开发,系统内核等[/font对系统要求很苛刻的环境而切值得一提的是C 已经成为了更加学院派的东西了也就是说它是一个实验的平台比如对泛型编程的支持。C/C 很灵活性带来的缺陷就是过多的隐式特点,反而容易出错 最后要说的是C 是一个全新的语言于其说把对象加入到C中形成C 不如说把C的面向过程思维变换成面向对象思维形成的C 。C 有C的一切缺点和一切优点,但它比C更符合现代软件工程。如果你想深入系统内部,想成为真正的程序员,就选择C/C 。