`
蒙面考拉
  • 浏览: 160543 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

编程笔记(07-24)

 
阅读更多
 1 #include < stdio.h >
 2
 3 struct  llist
 4 {
 5      int  num;
 6     char  name[ 10 ];=>改成:string name;

 7      struct  llist  * next;
 8 }
;
 9 typedef  struct  llist node;
10 typedef node  * llink;
11
12
13 /**/ /* 链表的创建 */
14 llink createllist()
15 {
16     llink head;
17     llink ptr,ptr1;
18      int  i;
19     
20     head  =  (llink)malloc( sizeof (node));             // 分配第一个节点 =>head=new node
21      if ( ! head)
22          return  NULL;    
23     printf( " 请输入六项邮寄数据:\n " );
24     printf( " 请输入编号 ==>  " );
25     scanf( " %d " , & head -> num);=>
cin>>head->num;
26     printf( " 请输入编号(%d)的姓名 ==>  " ,head -> num);
27     scanf( " %s " ,head -> name);=>改成:cin.sync();string lname; cin>>lname;head->name=lname;
28     head -> next  =  NULL;
29     ptr  =  head;    
30      for (i  =   1 ;i  <   6 ; i ++ )
31      {
32         ptr1  =  (llink)malloc( sizeof (node));=>ptr1
=new node ;
33          if ( ! ptr1)
34              return  NULL;
35         printf( " 请输入编号 ==>  " );
36         scanf( " %d " , & ptr1 -> num);=>cin>>ptr1->num;
37         printf( " 请输入编号(%d)的姓名 ==>  " ,ptr1 -> num);
38         scanf( " %s " ,ptr1 -> name);=>
cin.sync();string lname; getline(cin,lname);head->name=lname;
39         ptr1 -> next  =  NULL;
40         ptr  ->  next  =  ptr1;
41         ptr  =  ptr  -> next;
42     }

43      return  head;
44 }

45
46 /**/ /* 链表的节点遍历 */
47 llink findnode(llink head, int  num)
48 {
49     llink ptr;
50     
51     ptr  =  head;
52      while (ptr  !=  NULL)
53      {
54          if (ptr -> num  ==  num)
55              return  ptr;
56         ptr  =  ptr -> next;
57     }

58      return  ptr;
59 }

60
61
62 void  main()
63 {
64     llink head;
65     llink ptr;
66      int  num;
67     
68     head  =  createllist();
69      if ( ! head)
70      {
71         printf( " 内存分配失败!\n " );
72         exit( 1 );
73     }

74      while ( 1 )
75      {
76         printf( " 请输入要寻找的邮寄编号 ==>  " );
77         scanf( " %d " , & num);
78          if (num  !=   0 )
79          {
80             ptr  =  findnode(head,num);
81              if ( ! ptr)
82                 printf( " 没有找到\n " );
83              else
84                 printf( " 姓名:%s\n " ,ptr -> name);
85         }

86          else
87             exit( 1 );
88     }

89 }
我们将代码做相应红色的改动。将结构体的name的类型改成string。我们必须注意到以下几点:
1. 我们用cin输入num之后,我们又用cin输入lname(cin>>lname或者getline(cin,lname))。在这之前我们需要调用cin.sync()(清空缓存区)或者fflush(stdin)(清空缓存区)或者getchar()(读取一个字符),因为上一次输入num之后还有一个回车字符留在stdin流中,影响lname的读取,lname会直接被读取为回车。
  2. 第20行以及32行,如果结构体name的类型是string,而我们分配内存的方式是malloc的话程序回报错。没有初始    化,name的内存地址有问题,没法用head->name=lname来给其赋值。这时我们应该使用new。两者之间的不同:
  1. malloc和free是C语言的标准库函数,而new和delete是C++的运算符。他们都是用于申请动态内存和释放内存
  2. 对于非内部数据类型 的对象而言,用maloc和free无法满足动态对象的要求。对象在创建的同时要求自动执行构造函数,消亡时自动执行析够函数。由于两者是库函数不是运算符,不再编译器控制范围内,没法把执行构造和析构函数的任务给malloc和free。
  3. 运算符new能完成动态内存分配和初始化 的工作。delete能完成清理和释放内存的工作。
  4. malloc和free仍然保存的原因:C++程序经常调用C程序,C程序只能使用这两个函数来管理动态内存。
  5. 两者之间的其他不同:new不需要头文件,malloc需要头文件库函数支持。new建立的是一个对象 ,而malloc分配的是一个内存。正因为new建立的是一个对象,所以才会调用对象里面的构造函数来进行初始化。malloc仅仅只能分配内存,free仅仅回收内存。
3. exit():参数为零时表示正常退出,参数非零时表示非正常退出。
4. 在c++中不能用加法操作符将两个字符串字面值相加 ,语法错误。
5. getch()和getchar()的区别:前者当你敲击某个键的时候就立即返回了,正常情况下读取的是你敲击的符号。后者可接受多个字符,直到回车才返回,但是第一个字符作为函数的返回值。使用功能之一:scanf()函数在输入时以回车作为结束的标志。但是并没有接受这个回车键,getchar()则用来接收这个回车键。如果缺省,将会影响下面的scanf()语句。因为如果不是用getchar()接收则下面的scanf()将首先接收到这个回车符号,将会导致一些列错误。当然我们也可以使用getch()来实现这个目的。







分享到:
评论

相关推荐

    侯捷-STL和泛型编程笔记1-4讲

    侯捷——STL和泛型编程笔记1-4讲

    新版Android开发教程&笔记--基础入门

    新版Android开发教程&笔记--基础入门一 新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2...

    Python学习笔记--皮大庆.pdf.zip

    【Python学习笔记--皮大庆.pdf.zip】是一个针对初学者的Python编程教程,源自英文书籍《How to think like a computer scientist》。这本书以易懂的方式介绍了Python语言的基础知识,旨在帮助没有编程背景的人快速...

    2D游戏编程笔记--DirectX库的使用

    《2D游戏编程笔记——DirectX库的使用》是一篇深入浅出地讲解DirectX库在2D游戏编程中应用的教程。作者蒋志强以轻松的写作风格,详细介绍了DirectX库,尤其是DirectDraw组件的使用。这篇文章适合已经有一定C++编程...

    QT高级编程视频教程-最强初级到高级编程开发丁林松--QT高级编程视频教程-最强初级到高级编程开发.zip

    QT高级编程视频教程是针对那些想要...同时,提供的"QT高级编程视频教程-最强初级到高级编程开发丁林松--QT高级编程视频教程-最强初级到高级编程开发.txt"文本文件,很可能是课程大纲或者笔记,可以作为辅助学习的资料。

    S7-200 Smart入门笔记1-8 程序合集

    S7-200 Smart入门笔记1-8 程序合集 S7-200 Smart入门笔记1——流水灯 按钮 S7-200 Smart入门笔记1——流水灯 定时器 S7-200 Smart入门笔记2——读时钟 S7-200 Smart入门笔记3——呼吸灯 S7-200 Smart入门笔记4——...

    倍福PLC编程笔记1-流水灯程序.zip

    倍福BECKHOFF PLC:自动化编程笔记(一)对应的程序实例,实现流程顺序控制 - 流水灯。借助CASE OF语法(类似与C语言的 switch case) + 信号上升沿功能块。

    新版Android开发教程及笔记-完整版.pdf

    新版Android开发教程&笔记--基础入门一.pdf 新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--...

    《WebGL编程指南》学习笔记webgl-study-notes

    《WebGL编程指南》学习笔记webgl-study-notes

    读书笔记-ARM汇编-编程.zip

    读书笔记----ARM汇编_编程.zip

    游戏编程笔记-起步3-贪吃蛇游戏源代码

    《游戏编程笔记-起步3-贪吃蛇游戏源代码》 贪吃蛇是一款经典的游戏,它的设计简单却富有挑战性,深受玩家喜爱。本篇笔记将深入探讨如何使用C++和Visual Studio 2008(以下简称VS2008)来实现一个简易的贪吃蛇游戏。...

    Python核心编程笔记-.pdf

    Python核心编程笔记-.pdf

    单片机听课笔记1-8课-(金沙滩2014年更新).doc

    单片机听课笔记 1-8 课是金沙滩工作室 2014 年更新的单片机学习笔记,涵盖了单片机的基础知识、KEIL 软件安装、单片机编程、硬件基础学习等方面的内容。 Lesson 1 讲解了 KEIL 软件的安装和基本配置,包括安装 ...

    java笔记.zip

    尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 ...2020-4-19 java 网络编程 2020-4-21 java反射 2020-4-22 java8 新特性 2020-4-27 单元测试

    新版android开发教程 笔记

    新版Android开发教程&笔记--基础入门一 新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2...

    python1903笔记 02-网络编程.zip

    python1903笔记 02-网络编程.zip

    新版Android开发教程和笔记

    新版Android开发教程&笔记--基础入门一.pdf 新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.p 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记...

    新版Android开发教程

    新版Android开发教程+笔记07--基础UI编程1 新版Android开发教程+笔记08--基础UI编程2 新版Android开发教程+笔记09--基础UI编程3 新版Android开发教程+笔记10--基础UI编程4 新版Android开发教程+笔记11--可视化UI设计...

    Android开发教程+笔记十-基础UI编程4.pdf

    Android开发教程+笔记十-基础UI编程4.pdf

    读书笔记软件 编程笔记 学习笔记

    标题中的“读书笔记软件 编程笔记 学习笔记”暗示了这个软件是专为记录、整理和检索读书、编程及各类学习过程中的知识而设计的。它可能包含以下核心功能: 1. **多类型笔记**:软件允许用户创建不同类型的笔记,...

Global site tag (gtag.js) - Google Analytics