“雷雨晨”的版本间的差异

来自软件实验室
跳转至: 导航搜索
学习过程与成果
 
(未显示同一用户的1个中间版本)
第6行: 第6行:
 
*[[对于c语言的学习]]
 
*[[对于c语言的学习]]
 
*对于shell编程的学习
 
*对于shell编程的学习
 
+
*对于数据结构在算法中的应用
 +
1,在c语言中实现一个线性表
 +
typedef struct node
 +
{
 +
  int data[30];
 +
........
 +
  struct node *next //定义线性表中的数据域指针域,指针域包含着数据和指向下一个元素数据域的指针
 +
}node;
 
==遇到的问题==
 
==遇到的问题==
  对于linux下的shell编程缺乏系统全面的认识,导致现在对于编写shell脚本半知半解,弄不明白该如何开始编写shell脚本
+
  在编写c语言程序的时候,碰到如下问题
 +
printf("姓名是\n");      scanf("%c",&yonghu[i].name); getchar();
 +
    printf("电话号码是\n"); scanf("%d",&yonghu[i].tel);getchar();
 +
    printf("家庭住址是\n"); scanf("%c",&yonghu[i].address);getchar();
 +
    printf("性别是\n");    scanf("%c",&yonghu[i].sex);getchar();
 +
    printf("年龄是\n");    scanf("%d",&yonghu[i].age);getchar();
 +
 
 +
printf("姓名是\n");      scanf("%c",&yonghu[i].name);
 +
    printf("电话号码是\n"); scanf("%d",&yonghu[i].tel);
 +
    printf("家庭住址是\n"); scanf("%c",&yonghu[i].address);
 +
    printf("性别是\n");    scanf("%c",&yonghu[i].sex);
 +
    printf("年龄是\n");    scanf("%d",&yonghu[i].age);
 +
 
 +
两组代码唯一的区别就是第一次出现的每一行代码都存在着一个getchar函数,虽然两组代码都不会报错(error和warning),但是,他们执行的结果是截然不同的,第一组代码的结果能让我们满意,但是第二组代码的结果则是屏幕上先出现"姓名是",然后"电话号码是",然后"家庭住址是""性别是""年龄是"一起跳出来了,我一开始并没有注意到回车在这其中的作用,后来经朋友提醒才意识到,是回车出了问题
 +
 
 +
在这里要感谢这篇文章:http://blog.csdn.net/chenglibin1988/article/details/8755626,这里面介绍了这个问题的出现,原始就是我们在"姓名是"这行文字打出后开始输入姓名,然后回车,回车代表的是这个程序的触发,但其实回车也是一个字符,就是空字符,我们在读取完姓名后,由于电话号码是整型数据,所以这个回车对其并没有影响,输入完电话号码后的回车,会影响下面的家庭住址和性别的输入,正常情况下,家庭住址会被赋上空格字符,不影响性别的输入,但是,我的电脑有一些问题,一次回车在程序中产生了两次的效果,uishi性别也被略过去了,只剩下年龄的输入
 +
 
 +
解决方法:
 +
 
 +
1,在每一个scanf函数后面加一个getchar().这个函数会"吃掉"你输入的空格键,让其不再对程序产生不必要的影响
 +
 
 +
2,并没有实践过的做法,在scanf函数中加上换行符\n,根据scanf函数的定义,只有scanf函数能产生这个效果,原因未知.....

2016年3月24日 (四) 22:37的最新版本

个人介绍

2015级 电子信息科学与技术

学习过程与成果

我的博客

  • 对于linux系统的学习
  • 对于c语言的学习
  • 对于shell编程的学习
  • 对于数据结构在算法中的应用

1,在c语言中实现一个线性表 typedef struct node {

 int data[30];

........

 struct node *next //定义线性表中的数据域指针域,指针域包含着数据和指向下一个元素数据域的指针

}node;

遇到的问题

在编写c语言程序的时候,碰到如下问题

printf("姓名是\n"); scanf("%c",&yonghu[i].name); getchar();

   printf("电话号码是\n"); scanf("%d",&yonghu[i].tel);getchar();
   printf("家庭住址是\n"); scanf("%c",&yonghu[i].address);getchar();
   printf("性别是\n");     scanf("%c",&yonghu[i].sex);getchar();
   printf("年龄是\n");     scanf("%d",&yonghu[i].age);getchar();

printf("姓名是\n"); scanf("%c",&yonghu[i].name);

   printf("电话号码是\n"); scanf("%d",&yonghu[i].tel);
   printf("家庭住址是\n"); scanf("%c",&yonghu[i].address);
   printf("性别是\n");     scanf("%c",&yonghu[i].sex);
   printf("年龄是\n");     scanf("%d",&yonghu[i].age);

两组代码唯一的区别就是第一次出现的每一行代码都存在着一个getchar函数,虽然两组代码都不会报错(error和warning),但是,他们执行的结果是截然不同的,第一组代码的结果能让我们满意,但是第二组代码的结果则是屏幕上先出现"姓名是",然后"电话号码是",然后"家庭住址是""性别是""年龄是"一起跳出来了,我一开始并没有注意到回车在这其中的作用,后来经朋友提醒才意识到,是回车出了问题

在这里要感谢这篇文章:http://blog.csdn.net/chenglibin1988/article/details/8755626,这里面介绍了这个问题的出现,原始就是我们在"姓名是"这行文字打出后开始输入姓名,然后回车,回车代表的是这个程序的触发,但其实回车也是一个字符,就是空字符,我们在读取完姓名后,由于电话号码是整型数据,所以这个回车对其并没有影响,输入完电话号码后的回车,会影响下面的家庭住址和性别的输入,正常情况下,家庭住址会被赋上空格字符,不影响性别的输入,但是,我的电脑有一些问题,一次回车在程序中产生了两次的效果,uishi性别也被略过去了,只剩下年龄的输入

解决方法:

1,在每一个scanf函数后面加一个getchar().这个函数会"吃掉"你输入的空格键,让其不再对程序产生不必要的影响

2,并没有实践过的做法,在scanf函数中加上换行符\n,根据scanf函数的定义,只有scanf函数能产生这个效果,原因未知.....