61阅读

晚上睡觉总是半夜醒来-scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精

发布时间:2017-09-19 所属栏目:早博

一 : scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精

scanf杂谈

      不得不说C语言真是博大精深!相比其他很多语言来说,C语言给人的表象就是结构精炼,内容简单。(www.61k.com]注意,那仅仅是表象!的确,C语言入门简单得很。但要真正做到掌握C语言甚至达到驾轻就熟的程度,谁敢说容易?
      就从函数scanf说起吧。对于学习C的朋友来说,最熟悉的函数除了入门第一个"Hello World"程序用到的printf外,恐怕非scanf莫属了吧?但思考一下,你真掌握scanf了吗?呵呵~或许scanf比你想象中要强大的多!下面来整理一下我实践中使用scanf时遇到过的问题以及经过翻书、百度、google来的资料:
     
一、关于字符输入的问题scanf("%c",&char)与scanf("%s",&char)

1.scanf("%c",&char)

先看一段程序:

#include <stdio.h>
#include <stdlib.h>

void ctoi();
void itoc();

int main(){
   int choice;
   printf("请选择:\n");
   printf("1.从键盘中输入一个英文字母,打印输出该英文字母的ASCII码值:\n2.从键盘中输入一个ASCII码,屏幕显示对应的字符\n");
   scanf("%d",&choice);
   switch(choice){
        case 1:ctoi();break;
        case 2:itoc();break;
        default: printf("Input Error!\n");           
    }
}

/*以下函数作用是从键盘中输入一个英文字母,打印输出该英文字母的ASCII码值*/
void ctoi(){
   printf("请输入英文字母:");
   char c;
   scanf("%c",&c);//留意这一行
   if((c>='A'&&c<='Z')||(c>='a'&&c<='z')){
       int i;
       i=c;
       printf("%c的ASCII码为%d\n",c,i);
   }
}

/*从键盘中输入一个ASCII码,屏幕显示对应的字符*/
void itoc(){
   int i;
   printf("请输入ASCII码(0-255):\n");
   scanf("%d",&i);
   if(i>=0&&i<=255){
       char c;
       c=i;
       printf("ASCII码%i对于的字符为%c\n",i,c);
   }else{
       printf("输入的不是ASCII码,请重新输入!\n");
   }
}

运行结果:

scanf返回值 scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精深!!

   
2.scanf("%2c",&char)


#include <stdio.h>
#include <stdlib.h>

void ctoi();
void itoc();

int main(){
   int choice;
   printf("请选择:\n");
   printf("1.从键盘中输入一个英文字母,打印输出该英文字母的ASCII码值:\n2.从键盘中输入一个ASCII码,屏幕显示对应的字符\n");
   scanf("%d",&choice);
   switch(choice){
        case 1:ctoi();break;
        case 2:itoc();break;
        default: printf("Input Error!\n");           
    }
}

/*以下函数作用是从键盘中输入一个英文字母,打印输出该英文字母的ASCII码值*/
void ctoi(){
   printf("请输入英文字母:");
   char c;
   scanf("%2c",&c);//留意这一行
   if((c>='A'&&c<='Z')||(c>='a'&&c<='z')){
       int i;
       i=c;
       printf("%c的ASCII码为%d\n",c,i);
   }
}

/*从键盘中输入一个ASCII码,屏幕显示对应的字符*/
void itoc(){
   int i;
   printf("请输入ASCII码(0-255):\n");
   scanf("%d",&i);
   if(i>=0&&i<=255){
       char c;
       c=i;
       printf("ASCII码%i对于的字符为%c\n",i,c);
   }else{
       printf("输入的不是ASCII码,请重新输入!\n");
   }
}

2.scanf("%s",&char)


#include <stdio.h>
#include <stdlib.h>

void ctoi();
void itoc();

int main(){
   int choice;
   printf("请选择:\n");
   printf("1.从键盘中输入一个英文字母,打印输出该英文字母的ASCII码值:\n2.从键盘中输入一个ASCII码,屏幕显示对应的字符\n");
   scanf("%d",&choice);
   switch(choice){
        case 1:ctoi();break;
        case 2:itoc();break;
        default: printf("Input Error!\n");           
    }
}

/*以下函数作用是从键盘中输入一个英文字母,打印输出该英文字母的ASCII码值*/
void ctoi(){
   printf("请输入英文字母:");
   char c;
   scanf("%s",&c);//留意这一行
   if((c>='A'&&c<='Z')||(c>='a'&&c<='z')){
       int i;
       i=c;
       printf("%c的ASCII码为%d\n",c,i);
   }
}

/*从键盘中输入一个ASCII码,屏幕显示对应的字符*/
void itoc(){
   int i;
   printf("请输入ASCII码(0-255):\n");
   scanf("%d",&i);
   if(i>=0&&i<=255){
       char c;
       c=i;
       printf("ASCII码%i对于的字符为%c\n",i,c);
   }else{
       printf("输入的不是ASCII码,请重新输入!\n");
   }
}

/*以上程序均在ubuntu8.04+gcc上运行通过*/

附scanf函数转换说明符:

scanf返回值 scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精深!!
表1

       
     总结:使用scanf("%c",&c),程序不等我输入字符就自动结束了;而用scanf("%2c",&c),程序接受字符 输入,但没输出;用scanf("%s",&c),程序起到预期效果,有输入输出。按照表1scanf函数转换说明符的定义,要输入一个字符,我们很自然会想到用scanf("%c",&c)而非scanf("%s",&c)吧?但事实是后者才正确!scanf返回值 scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精深!!到底其中有什么玄机呢???查了不少资料,结果尚未有答案!scanf返回值 scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精深!!哪位高手要是知道的话麻烦赐教啦!


今天找到了答案:
*************************************************************************************
问题的关键是scanf函数的运行机制:
当连续进行数值与字符的输入时,一旦输入的不是数字或小数点,系统就将它解释为字符,赋给了后面的字符变量。
程序中你用scanf("%f",&num);(尽管有printf一名,但没有作用)后面跟着又scanf("%c",&people);时,系统将你的输入num后的回车(或空格)赋给了people。因此程序不能正确执行。
当你用%s输入时,系统是将空格或回车解释为前一项结束,后一项开始,因此可以正确执行程序。
要解决这个问题,你可将字符的输入换成:
people=getche();
lab=getche();
应能解决。
来自:ltopic.csdn.net/t/20020520/12/736575.html
*************************************************************************************

二、scanf函数的格式说明
摘自:www.neu.edu.cn/cxsj/online/C4/C4_4_2.html

格式说明字符串规定了输入项中的变量将以何种类型的数据格式(由转换说明符给出)被输入,格式控制字符串的一般形式:
      % [修饰符]转换说明符
其中修饰符为任选项。
1)格式转换说明符:用于指定相应输入项内容的输入格式,常用格式见下表1。

表1 scanf函数转换说明符

格式

意义

d

输入一个十进制整数

o

输入一个八进制整数

x

输入一个十六进制整数

i

输入一个有符号或无符号的十进制、八进制、十六进制整数

u

输入一个无符号十进制整数

f 、e或E、 g或G

输入一个小数形式或指数形式的浮点数

c

输入一个字符

s

输入一个字符串

例如:
      int x;
      scanf(“%d”,&x);
它有两个参数“%d”和&x,第一个参数是格式控制字符串,由%后接一个类型转换说明符构成,指出用户应该输入的数据类型,转换说明符%d说明输 入的数据应该是一个整数。第二个参数是变量x的地址,&与变量名连用是将变量x的内存地址告诉scanf函数,计算机然后就会将输入的数据存储在 这个地址单元中。
计算机在执行scanf语句时,等待用户输入变量x的值,用户通过键入一个整数并按下回车键响应请求,计算机把用户的输入值赋给变量x,操作完成后,对x 的引用就会使用这个值。scanf函数(及后面学习的printf函数)提高了用户与计算机之间的交互性。
在有多个输入项时,如果格式控制字符串中没有普通字符或转义字符作为读入数据之间的分隔符,则一般采用空格符、<Tab>符或回车键作为读入 数据的分隔符,当C语言的编译系统空格符、<Tab>符或回车键以及非法字符时,会自动认为数据输入结束。计算机等待所有的数据输入结束后的 最后一次<回车键>,将读入的数据分别付给对应的变量所指定的内存单元。如果数据的输入少于格式控制字符串中指定的转换说明符的个数,则计算 机将一直等待数据的输入,直到所有数据全部被键入为止。
例如:
      int x,y;
      scanf(“%d%d”,&x,&y);
读入数据的方式可以是:
      1<空格>2<回车>
或者
      1<回车>
      2<回车>
或者
     1 <Tab>2<回车>
采用“%d%d”形式的格式字时,不能使用其它的数据读入方式。例如:1,2<回车>,会使得只有1被送入x单元,而y单元不能够得到数据2。
但是,在输入多个带有字符型数据时,若以空格符作为分隔符,可能产生非预期的结果。此时,空格将被作为有效字符处理。
例如:
      int a;
      char ch;
      scanf(“%d%c”,&a,&ch);
如果数据读入方式为:123<空格>a<回车>,本意是期望变量a的值为数值32,变量ch的值为字符a,但实际上用于分隔数据 的空格被作为有效字符数据读入并赋予给字符变量ch。为了避免这种情况,可以在格式控制字符串中加入空格作为分隔符。将上面例句改为:scanf(“%d%c”,&a,&ch);此处的%d后的空格,就可以跳过字符‘a’前所有的空格,从而保证非空格数据的正确录入。

2)修饰符
scanf函数的修饰符有:数据读入宽度(域宽)、*和长度。修饰符和意义见下表2。

表2 修饰符以及意义

标识符

意义

域宽

指定输入数据的宽度

*

跳过相应数据不作处理

l或h

读入长整型、双精度型或短整型数据

①域宽
可以用一个十进制数指定输入数据的数据宽度,系统自动按域宽截取输入数据。
例如:
      int a;
      scanf(“%3d”,&a);
表示按宽度3输入一个整数给变量a。如果读入数据为:123456<回车>,则变量a实际接收的值为123。
例如:
      int a,b,c;
      scanf(“%2d%3d%4d”,&a,&b,&c);
如果读入数据为:123456789<回车>,则变量a、b 、c 的值分别是12、345和6789。可以实现数据的自动截取。 ②字符*
*表示按指定格式读入数据但不赋予相应的变量,作用是跳过相应的读入数据。
例如:
      int a,b,c;
      scanf(“%d%*d%d”,&a,&b,&c);
执行该语句,若输入为1? 2? 3<回车>,结果为a=1,b=3,c未赋值,2被跳过。
例1:一个实际问题——处理一个日期数据。
假设日期读入的格式为: 12-2-2003或12/02/2003,该数据格式中的年、月、日三个数据需要保存,但是连接年、月、日数据的连接符需要被废弃。
当用户以12-02-2003形式键入日期数据时,该数据中的每一个数值(年、月、日)需要被读入对应的变量year、month、date内存单元中, 为了去掉不需要的将年、月、日数据分开的连接符,直接方法是将这些字符包含在scanf的格式控制串中。
例如将语句写成:scanf(“%d─%d─%d’,&date,&month,&year);这条语句可以去掉以 12-2-2003形式读入数据中的连字符,但是当用户输入如下格式的日期数据::12/2/2003或12:2:2003时,该语句语句不仅不能去掉不 需要的字符(/或:),还会造成数据错误(只能正确得到date数据)。如果在输入格式字符串中使用scanf函数提供的*,将语句写成:
scanf(“%d%*c%d%*c%d’,&date,&month,&year);就能够从输入数据中读取有效数据并废弃任何%*c所指定的数据(不将其赋给某个变量)。
程序清单如下:
#include<stdio.h>
main( )
{
      int month, day,yaer;
      printf("Enter a date in the form d-m-y:");
      scanf("%d%*c%d %*c%d",&date,&month,,&year);
      printf("date=%d month=%d year=%d\n",date ,month,year);
}
运行结果:
      Enter a date in the from d-m-y:12/3/2003
      day=12,month=3,year=2003

③l和h
用于说明输入的数据时长整型(l)或短整型(h)。l和h可以和转换说明符d、o、x一起使用,形式为%ld、%lo、%lx、%hd、%ho、%hx,此外l还可以与f或e一起(%lf或%le)表示输入double型数据。
例如:
      long a;
      short b;
      scanf(“%10ld%hd”,&a,&b);
表示变量a的数据按宽度为10的长整型读入,而变量b的数据按短整型读入。
3)普通字符(非格式字符)
格式控制字符串中除了格式字与修饰符外,还可以包含普通字符,这些普通字符包括:可打印字符、空格和转义字符。
①可打印字符:对scanf函数,如果格式控制字符串中的说明符之间包含有其他字符,那么在输入数据时,必须在相应位置读入这些字符。
例如 :
      int a,b;
      scanf(“%d,%d”,&a,&b);
若数据输入:1<空格>2;则只有变量a的数据是正确的,变量b则会发生错误。这是因为格式控制字符串中存在可打印字符“,”,所以在读入数据时,必须以“,”作为输入数据的分隔符。
正确地读入数据方式应为:1,2<回车>
又如:scanf(“a=%d,b=%f,c=%c”,&a,&b,&c);当输入为:1,2,a时,虽然采用了“,”分隔数 据,但也会产生错误,因为在格式控制字符串中还有其他的可打印字符(如:“a=”,“b=”,“c=”等)。也就是说,这些字符作为输入数据的分隔符,在 scanf函数读入数据时自动去掉。因此正确地数据读入方式应为:a=1,b=2.1,c=a<回车>
②空格
格式控制字符串中的空格可以分隔数据,在多个数据输入过程中,如果没有普通字符做数据的分隔符,则在数值数据输入时,可以用空格作为读入数据的分隔符,但在字符数据输入时,空格则不能作为数据之间的分隔符,它将被作为有效数据处理。
③转义字符
在以%c格式的数据读入中,转义字符被作为有效字符处理。而在格式控制字符串中的转义字符具有输入转义字符所代表的控制代码或特殊字符的功能。
请分析下面程序代码:
main()
{
      int a,b;
      scanf("%d%d\n",&a,&b);
      printf("a=%d,b=%d\n",a,b);
}
如果输入1 2,会发生什么现象?应该怎样读入数据,才能得到执行结果?


提示

尽量不要在scanf()函数的格式控制字符串中出现普通字符,特别是转义字符,它会增加读入数据的难度并可能造成不可预料的错误。




三、scanf函数的几个使用技巧
摘自:dev.csdn.net/article/10/10606.shtm

  "哈哈哈,各位高手菜鸟,今天, 我来主讲scanf函数的一些用法","什么什么,这小子是不是欺负我们不识字呀!","scanf谁不会!".....台下一大堆臭鸡蛋,烂番茄如下雨 般扔上台来,有人喊"这小子铁定欠扁","一定是想来骗稿费!"。。。。。。。。。。。(作者:冤枉呀!写这种冬冬那里有钱可赚,我已穷的快卖血了, 呜。。。。。。。。。。。")

--------------------------------------------------------------------------------
-------------------------------------------   

   今天主要谈三个问题:

   一.scanf函数输入格式中的字符串.

    scanf函数输入格式中也可以含有普通字符串, 但他的含义是这些字符必须在输入中出现
,例如:


          int num;
          Scanf("hello %d", & num);

   他的含义是首先要求输入一个hello字符串,然后再输入一个十进制数. 注意在等待输入时
忽略hello与要输入的数之间
的空格,制表符,回车. 因此这两种输入都是正确的:

          hello 1234
          hello1234



    二.scanf函数的返回值.


      看到一个学弟写的程序:

             #include <stdio.h>
             main()
             {
                 int num;
                 printf("please input the student's score: ");
                 scanf("%d",&num);

                 if((num<0)||(num>100))
                 {
                      printf("The score put isnt fine. please run and input again.");
                 }
                 else if(num>90)
                 {
                      printf("The grade is A.");
                 }
                
                 else if((num>80)&&(num<90))
                 {
                     printf(..................
                     .............
                 }
                 ..............
                        
              }

          
      这个程序是没错,不过如果有人要存心捣乱, 输入时不是输入数字,而是其他的什么字
符,那么congratulations,
这个程序崩溃掉了. (^@^)           

      如何防止出现这种情况,有人通过把数字先读入到数组中,再判断读取的是不是一个数
字........., 作法真的好繁.

      如果知道scanf函数的返回值的话,这个问题就好办多了. scanf函数执行成功时的返回
值为成功读取的变量数,
如果第一个变量的读取既告失败则返回值为0.   

      哈哈哈,我们可以通过判断scanf函数执行的返回值,  可以制止用户不正确地输入,从
而控制程序的流程.

    把上面的程序改改:

     
             #include <stdio.h>
             main()
             {
                 int num,int result=0;
                 printf("please input the student's score: ");
                  
                while(result==0)
         {
     fflush(stdin);  /*  清空输入缓冲区. */
     if(result!=1)printf("Please input a digital score: ");
     result=scanf("%d",&num);
         }
              ............................
              }
  
         一切OK!


    三.scanf函数中一个参数的应用.

   
   在scanf函数中,我们可以使用 %c来读取一个字符,使用 %s 读取一个字符串. 但是读取字
符串时不忽略空格,读字符串时忽略开始的空格,
并且读到空格为止,因此我们只能读取一个单词,而不是整行字符串.因此一般使用fgets来读
取一个字符串.

   其实scanf函数也可完成这样的功能,而且还更强大.

   这里主要介绍一个参数,%[ ] ,这个参数的意义是读入一个字符集合. [ ]是个集合的标
志,因此%[ ]特指读入此集合所限定的那些字符, 比如 %[A-Z] 是输入大写字母,一旦遇到不在
此集合的字符便停止. 如果集合的第一个字符是" ^ ", 这说明读取不在" ^ " 后面集合的字
符,既遇到" ^ " 后面集合的字符便停止.注意此时读入的字符串是可以含有空格的.

  Eg.  输入一个字符串, 这个字符串只含有小写字符.遇到第一个不是小写字符时停止.

      scanf("%[a-z],str);

  Eg.  想输入一个字符串, 遇到 "." 停止,可设计如下:

     scanf("%[^.]", str);

    使用这个参数,你可以完成许多强大的功能呦!
--------------------------------------------------------------------------------
----------------------------------------

   各位父老乡亲们, 这就是本人在用scanf函数时的一点小心得..............
(台下想起如雷的吼声,"这么简单的东西,你当我们是白痴呀!","退门票,退门票!",顿时,作者
被一大堆飞来的臭鞋掩埋............)



   作者的话: 这是我的第一篇技术文章, 肯定会有一些错误,欢迎大家的指点. 其实我更喜欢C++, 也许以后会写一些C++的文章,欢迎高手的指点.

        如果能或得大家的支持的话, 我会继续写的. (^-^)

                                                  作者: hyqryq     



   再说几句:  通常来讲,scanf函数和他的一些参数并不是很常用,主要是因为:

              1.许多系统的scanf函数都有漏洞. (典型的就是TC再输入浮点型时有时会出
错).
              2.用法复杂,容易出错.
              3.编译器作语法分析时会很困难,从而影响目标代码的质量和执行效率.
          

二 : 为什么睡觉经常在半夜醒来?有什么办法能让我一觉睡到天亮就是晚上总

为什么睡觉经常在半夜醒来?有什么办法能让我一觉睡到天亮

就是晚上总在半夜醒来,总要醒好一会才能睡着,再睡着不到2个小时就又要醒了!身体没有什么不适,


怎样睡个安稳觉

——世界睡眠日关注失眠症

北京安定医院临床心理科 姜长青

通常,人们习惯地认为成人每天应该有8小时的睡眠,但实际个体差异相当大。有的人可能睡够4~6个小时就能满足生理需要,健康人群中大约有10%属于这种情况,15%的人睡眠超过8个小时甚至更多,总人口的平均睡眠时间大约为7.5个小时。

有些人睡眠时间不长,但一觉醒来感到舒适满足,另一些人睡眠时间虽然不短,但不是多梦,就是易醒,睡了一夜总觉得没有睡醒,困倦异常。所以临床上在判断一个人睡眠的好坏时,应同时考虑睡眠时间和睡眠质量。

睡眠分期与节律

睡眠共分5期,每晚8小时的睡眠中,每90分钟左右各个睡眠期循环一次。其中前四期为非快速眼动睡眠(NREM)或称慢波睡眠(SWS),最后一期为快速眼动睡眠(REM)。

SWS是从朦胧入睡开始,随后睡眠逐渐加深,一直到熟睡的整个过程。此期脑电呈慢波,眼球没有活动,故称非快速眼动睡眠。按睡眠时的脑电图模式,此期又分为4期。

入睡期:是清醒和睡眠之间的转换期,人很容易醒来,约占睡眠总时间的10%。

浅睡期:此期容易觉醒,入睡困难者,常自行惊醒,约占整个睡眠期的50%。

中睡期:此期意识消失,不易觉醒,在每个睡眠周期约延续1小时左右。

深睡期:此期睡眠深,觉醒相当困难,在每个睡眠周期中约持续30分钟,然后进入快速眼动睡眠。

在整个睡眠周期中,SWS与REM有规律地交替出现,两种不同时相睡眠各出现一次为一个睡眠期。每个周期历时70~90分钟,入睡后必须先经过SWS阶段,才能进入REM。

睡眠剥夺实验

睡眠剥夺实验,实际上是一种特殊的人为失眠。了解睡眠对人体产生的不良影响,包括心理的和生理的机能紊乱,有助于临床上认识睡眠不足的后果。

有这样一个真实故事:国外有一位生物学家,因为一向睡得比较少,所以他认为睡眠并非人体的生理需要,只是人的一种习惯。为了证明自己的看法正确,他设计了一个实验,让自己为研究对象,让几位助手严密地监视他,不让他睡觉,也不让他打盹。他想睡的时候就立即提醒他。实验进行了10个昼夜。这位生物学家坚持了240个小时不睡觉。在体验中,虽然没有发现身体出现什么疾病,但他的精神状态却发生了显著变化。注意力变得很难集中,脾气变得非常暴躁。实验结果有力地说明,如果一个人没有睡眠,身心健康会受到严重影响。

进一步的实验是选择性睡眠剥夺。观察者只要发现睡眠中的受试者出现眼动或脑电变化时,立即将其唤醒,就可以选择性地终止REM。剥夺REM在短期内并不发生严重不良反应,受试者或许会出现轻微的焦虑不安、急躁、易激惹等表现,但当剥夺时间较长时,有出现幻觉和恐怖感的报道。

怎样判断失眠症

失眠症是一种持续相当长时间的睡眠的质和量令人不满意的状况。在失眠者中,以入睡困难最为常见,其次是睡眠表浅和早醒,有些表现为睡眠感觉缺乏,通常以上情况并存。

失眠持续的时间有重要的诊断意义。仅仅几天的短暂失眠是一种正常现象,诊断不宜扩大化。以下是确诊失眠症的具体标准,供参考:

1.几乎以失眠为惟一的症状,包括难以入睡、睡眠不深、易醒、多梦、早醒,或醒后不易入睡,醒后感到不适,疲乏或白天困倦。

2.具有失眠和极度关注失眠结果的优势观念。

3.失眠引起显著的苦恼或精神活动效率下降,或妨碍社会功能。

4.上述睡眠障碍每周至少发生3次,并持续1个月以上。

5.不是任何一种躯体疾病或精神障碍症状的一部分。

失眠症与安眠药

安眠药的使用是极为广泛和随便的,目前这种倾向有增加的趋势。

对于应用安眠药引起药物性睡眠的脑电研究证明,药物睡眠不同于生理睡眠,其中突出的是REM的比例显著减少。安眠药引起的药物性睡眠表面上似乎满足了睡眠时间,实际上却使患者长期处于较大失眠时还严重的REM剥夺状态,而REM对人体来说是SWS所不能取代的。安眠药使用者的自我感觉也表明了这种情况,服药后虽然整夜入睡,但REM严重不足,因而早晨醒来仍然昏昏沉沉,好像没有睡够。对于通常的失眠症患者来说,安眠药虽有助于睡眠,但不应常规使用,使用期最好不要超过21~28天,并选择半衰期较短的药或间断给药(每周2~4次),以减轻白天的镇静作用。

长期使用安眠药会使机体产生依赖性。药物依赖者一旦得不到引起药物依赖的药品,就会产生戒断症状,在安眠药物中以速可眠、眠尔通、安眠酮等产生的药物依赖性较为严重,尤其是安眠酮的滥用已在全世界范围内造成严重后果。为此,临床医生和失眠者必须重新认识睡眠和失眠症,重新评价安眠药的作用,慎重使用安眠药。

失眠症的心理与行为干预

治疗失眠症首先应强调睡眠卫生,特别是一次性或短暂失眠可望通过这些措施得到解决,具体方法有以下几点:

1.保持有规律的作息制度,准时上床和起床,白天不午睡(包括节假日)。

2.睡在床上的时间不要超过睡眠障碍之前的时间。

3.停止饮用对中枢神经有兴奋作用的物质,如咖啡、浓茶、酒精等。

4.定时进食,晚餐不宜过饱。

5.避免入睡前阅读带刺激性书刊。

6.在入睡前做放松活动,如按摩、推拿、静坐等。

7.卧室内环境要舒适,温度适宜,避免噪音、亮光。

8.如卧床20分钟不能入睡,应起床,等想睡时再睡。

9.早晨起床后要坚持体育锻炼。

失眠症病人最突出的特点是极易对睡眠产生恐惧,当夜晚来临时费尽心机地思考如何尽快入睡,同时害怕失眠,造成内心冲突,由此形成恶性循环。打破这种恶性循环的一种办法是顺其自然,采取能睡多少就睡多少的态度。

特殊的心理治疗方法还包括放松疗法、生物反馈技术、认知-行为治疗等疗法,具体实施可在临床医生和心理医师的指导下进行。

三 : 他说很累了,是什么意思?半夜他发来短信说这么晚了他还在想我,他觉

他说很累了,是什么意思?

半夜他发来说这么晚了他还在想我,他觉得很累.
这话是什么意思啊!
我们放假在家,到现在已经有一个月没见面了.
我很担心他说很累是什么意思啊!


我想是因为太挂念你而已,

毕竟都一个月没见,当然想你想得很辛苦..

四 : 为什么总是清晨4点就醒以前都是晚上10点~11点睡觉,早上7点才

为什么总是清晨4点就醒

以前都是晚上10点~11点睡觉,早上7点才醒来,最近1个月来,每天都是早上4点就醒,然后上能睡着,接着5点醒,又马上睡着,6点多还要醒一次,继续睡着,最后7点醒起床,很苦恼啊,请问这是为什么?以前没有过这种情况,我应该还没有抑郁症,另外晚上睡觉总做梦,做过一些掉牙齿的事情,是否是自己的呼吸系统有问题呢?请大家帮忙!!!谢谢!!!


有心事,或者生物钟乱了。可以解决:多运动,晚上跳迪斯科2小时累一累,再洗个澡,把闹钟定到7点,只管睡。

五 : 关于早博的疑问半夜里醒来,小弟弟是硬梆梆的;可是早上醒的时候小弟

关于早博的疑问

半夜里醒来,小弟弟是硬梆梆的;可是早上醒的时候小弟弟就不是完全状态了,我就会习惯性的摸摸小弟弟,然后他就会完全勃起了,这样早博正常吗?有时午睡之后也会勃起,但不是每次都这样。
23岁,无性经历,有慢性前列腺炎,正在服用抗生素。


阴茎的夜间和晨起勃起

所有发育成熟、正常的男性都有阴茎的晨起勃起的体验,但少有人知道阴茎的夜间勃起。夜间勃起是指人在熟睡时阴茎的勃起。阴茎的夜间和晨起勃起是衡量男性性功能的重要指标之一。

研究发现,男性在熟睡后有自发的阴茎勃起。勃起的次数因年龄、体质、性功能状况的不同而有较大的差别。一般来说,年轻男性每晚有7-8次的勃起。随着年龄的增长,勃起的次数逐渐减少。健康正常的老年人,勃起的次数就大约为每晚2-3次。

但如果出现性功能下降、障碍,夜间勃起的次数就会减少甚至消失。夜间勃起是诊断病理性阳痿的重要客观指标。阳痿病人如果仍然有夜间勃起,那他只是功能性阳痿;如果没有夜间勃起,就可以作出病理性阳痿的正确诊断了。

夜间勃起的原因、作用仍然未十分明确。有人认为,夜间是睾丸制造、分泌雄激素(睾酮)的旺盛期,勃起是血液中雄激素水平增高的结果;也有人认为,夜间勃起是夜间植物神经功能活跃,机体自身的维护、修复功能所起作用的结果。

那么,如何使用简单的方法来知道有无夜间勃起呢?我为大家介绍一个最简单的方法,方法是:使用一宽度如邮票大小的长纸条,用针刺一排如邮票上的针孔,睡前环绕固定在阴茎上。如果第二天纸条裂开、断裂,那就是夜间勃起引起的。这在医学上称之为“邮票试验”。

至于晨起勃起,就是一个容易观察得到的性功能状况的指标了。如果你已经很长时间没有晨起勃起了,小心,你的性功能开始下降了。是到了为维持你的性功能做些工作的时候了。你不关心它,谁能够关心它呢?

本文标题:晚上睡觉总是半夜醒来-scanf()总结--从网上收来的,感觉很好,用来提醒自己,c语言真是博大精
本文地址: http://www.61k.com/1059017.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1