Menu Close

C语言字符和字符串的输入输出函数

C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。

一)输入输出函数如何工作的 ?什么是缓存和字节流?

严格地说,输入输出函数并不是直接与外部设备通信,而是通过缓存(buffer)进行间接通信。这个小节介绍缓存是什么。

普通文件一般都保存在磁盘上面,跟 CPU 相比,磁盘读取或写入数据是一个很慢的操作。所以,程序直接读写磁盘是不可行的,可能每执行一行命令,都必须等半天。C 语言的解决方案,就是只要打开一个文件,就在内存里面为这个文件设置一个缓存区。

程序向文件写入数据时,程序先把数据放入缓存,等到缓存满了,再把里面的数据会一次性写入磁盘文件。这时,缓存区就空了,程序再把新的数据放入缓存,重复整个过程。

程序从文件读取数据时,文件先把一部分数据放到缓存里面,然后程序从缓存获取数据,等到缓存空了,磁盘文件再把新的数据放入缓存,重复整个过程。

内存的读写速度比磁盘快得多,缓存的设计减少了读写磁盘的次数,大大提高了程序的执行效率。另外,一次性移动大块数据,要比多次移动小块数据快得多。

这种读写模式,对于程序来说,就有点像水流(stream),不是一次性读取或写入所有数据,而是一个持续不断的过程。先操作一部分数据,等到缓存吞吐完这部分数据,再操作下一部分数据。这个过程就叫做字节流操作。

由于缓存读完就空了,所以字节流读取都是只能读一次,第二次就读不到了。这跟读取文件很不一样。

C 语言的输入输出函数,凡是涉及读写文件,都是属于字节流操作。输入函数从文件获取数据,操作的是输入流;输出函数向文件写入数据,操作的是输出流。

二)C语言字符和字符串的输入函数

在编写要求用户输入的交互式程序(人机对话)时,C语言提供了scanf(),gets()和fgets(), putchar (), getchar()函数来查找从用户输入的一行文本。

1. getchar 函数(键盘输入函数)

getchar 函数的功能是从键盘上输入一个字符。

其一般形式为:

getchar();

通常把输入的字符赋予一个字符变量,构成赋值语句,如:

char c;
c=getchar();

例2.1. 输入并打印出一个字符

#include<stdio.h>
void main()
{
    char c;
    printf("input a character\n");
    c=getchar();
    putchar(c);
} 

 

使用 getchar 函数还应注意几个问题:

  •  getchar 函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符;
  •  使用本函数前必须包含文件“stdio.h”;
  •  在 TC 屏幕下运行含本函数程序时, 将等待用户输入一个字符。显示结果后,再输入字符将会推出运行;
  •  程序最后两行可用下面两行的任意一行代替:
putchar(getchar());
printf(“%c”,getchar());

2. scanf()函数

当我们使用 scanf()进行读取字符串时,我们使用“%s”格式,而不使用“&”访问变量地址,因为数组名称充当指针, 下面例子name[ ]相当于数组,字符串按指针处理,我们下一章将讲指针 。

scanf()函数用于读取用户的键盘输入。程序运行到这个语句时,会停下来,等待用户从键盘输入。用户输入数据、按下回车键后,scanf()就会处理用户的输入,将其存入变量。它的原型定义在头文件stdio.h。详细的scanf应用请看输入输出函数。

scanf()的语法跟printf()类似。对于字符串输入,scanf()的语法:

scanf ("%s", strname);

例2.2 scanf()函数输入字符串

#include <stdio.h>
int main()
{
  char name[10];
  int age;
  printf("Enter your first name and age: \n");
  scanf("%s %d", name, &age);
  printf("You entered: %s %d",name,age);
}
string input
string input

scanf函数的最大问题在于它从不读取整个字符串。 一旦出现空格,换页,垂直制表符,换行符或回车,它将停止读取过程。

假设我们以“2743 com”作为输入,则scanf函数将永远不会读取整个字符串,因为两个名称之间会出现空格字符。 scanf函数将仅读取2743。

3. gets()函数

gets函数将忽略空格。 当到达换行符时(按Enter键)它将停止读取。语法:

gets(Strname)

例2.3. gets()函数的应用

#include <stdio.h>
int main() {
   char full_name[25];
   printf("Enter your full name: ");
   gets(full_name);
   printf("My full name is %s ",full_name);
   return 0;
}

4. fgets() 函数

更安全的函数是fgets(), 可以读取特定数量的字符:

语法:

fgets(Strname, 10, stdin);

gets()的参数为:

  1. 字符串名称,
  2. 要读取的字符数,
  3. stdin表示从标准输入(这儿是键盘输入)中读取数据

例2.4.  fgets() 函数的应用

 #include <stdio.h>
int main() 
{
      char name[10];
      printf("Enter your  name plz: ");
      fgets(name, 10, stdin);
      printf("My name is %s ",name);
      return 0;
}

 

三)C语言字符和字符串的输出函数

1. putchar 函数(字符输出函数)

putchar 函数是字符输出函数, 其功能是在显示器上输出单个字符。

其一般形式为:

putchar(Varchar);

例如:

putchar(‘A’); (输出大写字母 A)
putchar(x); (输出字符变量 x 的值)
putchar(‘\101’); (也是输出字符 A)
putchar(‘\n’); (换行)

对控制字符则执行控制功能,不在屏幕上显示。使用本函数前必须要用文件包含命令:

#include<stdio.h>
或
#include “stdio.h”

例3.1 putchar()函数的应用

#include<stdio.h>
main()
{
    char a='B',b='o',c='k';
    putchar(a);putchar(b);putchar(b);putchar(c);putchar('\t');
    putchar(a);putchar(b);
    putchar('\n');
    putchar(b);putchar(c);
 }

 

2. fputs() 函数

fputs()需要字符串的名称,和指向显示文本位置的指针。语法:

fputs(Strname, stdout);

我们使用stdout标准输出打印到屏幕上.

例3.2 fputs()函数的应用

#include <stdio.h>
int main()
{
    char town[40];
    printf("Enter your town: ");
    gets(town);
    fputs(town, stdout);
    return 0;
}

3.puts() 函数

puts函数在输出设备上打印字符串,然后将光标移回第一位置。 可以通过以下方式使用puts函数:

puts(Strname);

例3.3 puts()函数的应用

 
 #include <stdio.h>
int main()
{
    char name[15];
    gets(name);        //reads a string
    puts(name);        //displays a string
    return 0;
}
 

 

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in C语言教程

Related Posts