字符输入输出详解

为什么每次C程序运行的时候总是需要按下Enter键才有效呢??

首先了解下两种缓存输入定义:

1、完全缓存输入:

当缓存区被填满时才刷新缓冲区(内容发送到目的地),通常出现在文件输入中。

2、行缓存输入:

指的是出现换行符才刷新缓冲区,键盘通常就是行缓存输入,所以按下Enter键后才刷新缓存区。

所以我们的C程序,每次都是等到了Enter键按下之后,才开始后面数据的获取,这个就是上面所说的行缓存输入。

常见处理字符输入、输出的有<strong>getchar、putchar、printf和scanf</strong>等,这些都是专门处理字符的输入和输出函数,这些不需要我们定义,只要C程序开头包含了头文件<strong>stdio.h</strong>,即可使用。

需要注意的地方,每当用户按下了Enter时,都会多传递一个换行符。

getchar与EOF使用

#include<stdio.h>
int main(){
    int ch;
    while((ch=getchar())!=EOF){
        printf("hello");    
    }
    return 0;
}

如下,若输入一个 1 再按回车键,会输出 两个 “hello”; 因为getchar会读取 1 和 回车键

Paste_Image.png

上面这个实例,不管你按了多少次的Enter键,都会继续运行下去,因为Enter换行符,不等于 EOF。

EOF定义:

EOF是C语言中,当检测某个文件到结尾时,将返回一个特殊的值,即EOF(end of file的缩写),getchar和scanf都会这样返回。其实EOF可以理解为一个值,标志着检测到了文件结尾,并不是在文件中能找得到符号。

可以在stdio.h中查看

#define EOF -1  

被定义成了-1,不过不同的系统定义的值可能不同。

读取文件案例

#include<stdio.h>
#include<stdlib.h>
int main(){
    FILE * fp;
    int ch;
    char fname[50];
    scanf("%s",&fname);
    fp = fopen(fname,"r");//打开读取文件
    if(fp==NULL){
        printf("打开文件失败");
        exit(1);
    }
    while((ch=getc(fp))!=EOF){
        printf("%s",&ch);
    }
    fclose(fp);
    return 0;
}

这下图是我的代码目录结构

Paste_Image.png

以上是我对C部分IO的总结,如有错误,还望指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容