最近很多人想了解c语言本身没有输入输出语句吗的相关内容,还有人想知道c语言本身没有输入输出语句的知识,因此小编今天为大家整理了一下,下面一起来看看吧。
C语言本身并不提供输入和输出语句,输入和输出的操作是由函数来实现的。C语言的标准函数库中提供了一些输入、输出的函数,例如:printf函数和scanf函数。但是,printf和scanf函数并不是C语言的关键字,只是函数的名字。
计算机的核心就在于用数据来模拟事物,数据和处理数据的代码输入并存储到内存,处理后产生输出。
数据的输入可以来源于键盘、扫描仪、磁盘文件、控件,字符串缓存、网络连接设备(文件)。
数据的输的去向可以是显示屏、打印机、磁盘文件、控件,字符串缓存、网络连接设备(文件)。
指令集是对CPU的抽象,文件是对输入/输出设备的抽象,虚拟存储器是对程序存储的抽象,进程是对一个正在运行的程序的抽象,而虚拟机是对整个计算机(包括操作系统、处理器和程序)的抽象。
console程序与图形界面程序的区别在于,前者是通过函数调用,而后者则是通过消息传递,如单击工具栏图标或菜单项或命令按钮。另外的区别在于输入与输出的方式不同,Windows采用控件这种窗口进行交互。
1 输入输出流的概念 C语言的数据输入使用输入流的概念,可以简单理解为流的数据按“先入先出”的方式提取(extraction)或插入(insertion)。
流实际上是程序中输入或者输出设备的一种抽象表示,它表示了信息从源端到目的端的运动。
在输入操作时,字节流从输入设备(如键盘、磁盘)流向内存;在输出操作时,字节流从内存流向输出设备(例如屏幕、打印机、磁盘等)。
流中的内容可以是ASCII字符、二进制形式的数据、图形图像、数字音频视频或其他形式的信息。
实际上,在内存中为每个数据流开辟一个内存缓冲区,是用来存放流中的数据。流是与内存缓冲区相对应的,或者可以说,缓冲区中的数据就是流。
C的一个基本原则是避免不必要的成分。
在嵌入式编程中,I/O就不是必需的,所以C并没有内置输入输出语句,而是通过库实现。
中声明的大多数函数是对一个流进行操作, 这个流和一个打开的文件相关联。在开始执行程序的时候,将自动打开3 个文件和相关的流:
stdin:读取文本的标准源(标准输入流)。
stdout:写入文本的标准目的地(标准输出流)。
stderr:输出错误信息的标准目的地(标准错误流)。
它们都是FILE*型的指针。流提供了文件和程序的通信通道。
中声明的许多函数都用到了这些流, 用户不需要对它们命名。
对那些需要一个流参数的函数, 可以选其中一个名字作为流参数。
也可以通过名字打开一个文件, 并和一个流连接起来。可以通过调用函数fopen或freopen把—个流和—个打开的文件关联起来, 例如:
FILE*fptr=fopen(fname,fmode);FILE*fptr=freopen(fname,fmode,fptr); 只有当这两个函数使用模式fmode打开文件名为fname的文件, 并且把该文件和fptr指向的对象控制的流联系起来时, 它们才返回指向FILE类型的指针类型的非空值。
结构体FILE定义了以下数据成员:
文件结束符:记录是否需要结束此文件。
错误指示符:记录读或写是否导致不可恢复的数据传输错误。
文件定位符:记录从文件中读出或写入的下一个字节(这在某些类型的文件中可能没有定义)。
缓冲信息:记录任何读写缓冲区是否存在和它的大小。
状态信息:决定下一个是读操作还是写操作。
demo:
#include#includestructStudent{charname[24];intage;doublechinese;doublemath;};intmain(){structStudentarr[100]={0};intn,i;printf(\”请输入需要输入数据的学生个数:\”);scanf(\”%d\”,&n);printf(\”请输入每个学生的数据:\\n\”);for(i=0;i%d\\n\”,str,i);//Rudolph->12getchar();return0;} 3.7 vprintf, vfprintf和 vsprintf #include#includeintvprintf(char*format,va_listarg_ptr);intvfprintf(FILE*stream,constchar*format,va_listarg_ptr);intvsprintf(char*buffer,char*format,va_listarg_ptr); 这些函数和printf()非常相似,fprintf()和 sprintf()的不同在于参数列表是一个指向一系列参数的指针。 va_list在STDARG.H中定义,并且也可以被va_arg()使用。
voiderror(char*fmt,…){va_listargs;va_start(args,fmt);fprintf(stderr,\”Error:\”);vfprintf(stderr,fmt,args);fprintf(stderr,\”\\n\”);va_end(args);exit(1);}