非格式化输入输出函数

非格式化输入输出函数
    非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替, 但
这些函数编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较
方便。下面分别进行介绍。
    一、puts()和gets()函数
    1. puts()函数
    puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为:
     puts(s);
    其中s为字符串变量(字符串数组名或字符串指针)。
    puts()函数的作用与语printf("%s/n", s)相同。
    例4:
     main()
     {
          char s[20], *f;                 /*定义字符串数组和指针变量*/
          strcpy(s, "Hello! Turbo C2.0"); /*字符串数组变量赋值*/
          f="Thank you";                  /*字符串指针变量赋值*/
          puts(s);
          puts(f);
     }     说明:
    (1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。
    (2). 可以将字符串直接写入puts()函数中。如:
          puts("Hello, Turbo C2.0");     2. gets()函数
    gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符
不属于这个字符串。其调用格式为:
    gets(s);
    其中s为字符串变量(字符串数组名或字符串指针)。
    gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)
函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,
空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符
串直到回车为止。
    例5
     main()
     {
          char s[20], *f;
          printf("What's your name?/n");
          gets(s);                      /*等待输入字符串直到回车结束*/
          puts(s);                      /*将输入的字符串输出*/
          puts("How old are you?");
          gets(f);
          puts(f);
     }
    说明:
    (1). gets(s)函数中的变量s为一字符串。如果为单个字符,  编译连接不会
有错误, 但运行后会出现"Null pointer asignmemt"的错误。
  
    二、putchar()、getch()、getche()和getchar()函数
    1. putchar()函数
    putchar()函数是向标准输出设备输出一个字符, 其调用格式为:
     putchar(ch);
    其中ch为一个字符变量或常量。
    putchar()函数的作用等同于printf("%c", ch);
    例6:
     #include<stdio.h>
     main()
     {
          char c:             /*定义字符变量*/
          c='B';              /*给字符变量赋值*/
          putchar(c);         /*输出该字符*/
          putchar('/x42');    /*输出字母B*/
          putchar(0x42);      /*直接用ASCII码值输出字母B*/
     }
    从本例中的连续四个字符输出函数语句可以分清字符变量的不同赋值方法。
    2. getch()、getche()和getchar()函数
    (1) getch()和getche()函数
    这两个函数都是从键盘上读入一个字符。其调用格式为:
     getch();
     getche();
    两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche()
函数却将读入的字符回显到显示屏幕上。
    例7:
     #include<stdio.h>
     main()
     {
          char c, ch;
          c=getch();     /*从键盘上读入一个字符不回显送给字符变量c*/
          putchar(c);    /*输出该字符*/
          ch=getche();   /*从键盘上带回显的读入一个字符送给字符变量ch*/
          putchar(ch);
     }
    利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停
等功能。
    例8:
     #include<stdio.h>
     main()
     {
          char c, s[20];
          printf("Name:");
          gets(s);
          printf("Press any key to confinue...");
          getch();  /*等待输入任一键*/
     }
  
    (2) getchar()函数
    getchar()函数也是从键盘上读入一个字符, 并带回显。它与前面两个函数
的区别在于: getchar()函数等待输入直到按回车才结束,  回车前的所有输入字
符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。
    getchar()函数的调用格式为:
     getchar();
    例9:
     #include<stdio.h>
     main()
     {
          char c;
          c=getchar();   /*从键盘读入字符直到回车结束*/
          putchar(c);    /*显示输入的第一个字符*/
          getch();       /*等待按任一健*/
     }
­
如下例:#include <stdio.h>
#include <string.h>
int main()
{
char c,s[20],*p;
int a=1234,*i;
float f=3.141592;
double x=0.12345678925364788568;
p="How do you do";
strcpy(s,"Hello,comrade");     //字符的拷贝;
i=&a;          //可以这样赋值;
//  *i=12;          //不能这样赋值;
//  *i=a;          //不能这样赋值;
c='/x41';
printf("a=%d/n",a);      
printf("a=%6d/n",a);      //输出6位,不够6位右对齐;
printf("a=%-6d/n",a);      //输出6位,不够6位左对齐;
printf("a=%06d/n",a);      //输出6位,不够6位补零;      
printf("a=%2d/n",a);
printf("a=%p/n",a);       //输出内存中存放数据的值,16进制;
printf("*i=%4d/n",*i);
printf("*i=%-4d/n",*i);
printf("i=%p/n",i);       //输出指针的值;
printf("f=%f/n",f);       //浮点数输出,最多小数点6位;
printf("f=%6.4f/n",f);      //浮点数整数输出6位,小数点后4位;
printf("f=%3.4f/n",f);      //浮点数整数输出3位,小数点后4位;
printf("x=%lf/n",x);      //输出长浮点数,默认与float相同都是6位;
printf("x=%18.16lf/n",x);     //输出小数点后16位长浮点数;
printf("c=%c/n",c);
printf("c=%x/n",c);       //输出字符的ASCII码;
//以上不能使用puts()函数,不能输出数值或格式变换;
printf("s[]=%s/n",s);
puts("s[]=");        //直接输出字符串;
gets(s);         //从键盘读入字符串,直到回车结束;
puts(s);         //输出s数组中的字符串;
printf("s[]=%6.9s/n",s);
printf("s=%p/n",s);       //输出数组字符串首字符地址;
printf("*p=%s/n",p);      //输出指针字符串;
printf("p=%p/n",p);       //输出指针的值;
gets(p);         //无法从键盘读入字符串;这是为什么?
puts(p);         //输出指针的字符串;
return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值