一.缓冲输入,无缓存输入
while((ch=getchar()) != '#')
putchar(ch);
这里getchar(),putchar()每次只处理一个字符(这里只是知道就好了),而我们使用while循环,当读到#字符时停止
而看到输出例子,第一行我们输入hello word然后按下回车键,把缓冲区里的字符输入到程序中(这种属于缓冲输入)
而还有另一种还有输入叫无缓存输入(因为我的电脑只支持缓存输入,所以这里用刚才输入的例子给你简单的解释下)
这里我们输入在输入hello word会出现这种情况
Hheelllloo wwoorrdd
这里的红色部分就是计算机输出部分,我们输入一个字符计算机就输出一个部分,不会进行缓存
这种无缓存输入一般我们在玩游戏就是这样,我们输入一个键就执行相应的指令
为什么要有缓存区呢,首先,把若干个字符作为一个块进行传输比逐个发送这些字符节约时间。其次,比如用户打错字符,可以直接通过键盘修正错位。当最后按下Enter键时,传输的是正确的输入。
那么,使用缓存输入还是无缓存输入,ANSI C和后续的C标准都规定输入时缓冲的
二.完全缓存和行缓存
完全缓存输入指的是当缓存区被填满时才刷新缓存区(内容被发送至目的地),通常出现在文件输入中。缓冲区的大小取决于系统,常见的大小是512字节和1096字节
行缓存指的时在换行符时刷新缓存区。键盘输入通常时行缓存输入,所以在按下Enter键后才刷新缓存区
三.实例讲解
这里我们做一个猜数字游戏游戏,计算器猜,猜对了久输入y,猜错了久输入n
这里我们让计算机猜数字,这里注意我们每次输入n时,程序会打印两条信息。这是由于程序读取n作为用户否定了数字1,然后还读取了一个换行符作为用户否定了数字2.
所以我们必须进行优化程序
while(getchar() != '\n')
continue;
这里我们用 while循环丢弃输入行最后剩余的内容,包括换行符。但是这个方法还是有个不好的地方就是我们输入n 或f都会被自动判断为n
源码:
#include <stdio.h>
int main(){
int guess = 1;
char response;
printf("Pick an integer from 1 to 100.I will try to guess.");
printf("it.\nRespond with a y if my guess is right and with");
printf("\nan n if it is wrong.\n");
printf("uh...is your number %d?\n",guess); //计算机猜数字
while((response = getchar()) != 'y'){
if(response == 'n') printf("Well,then,is it %d?\n",++guess); //如果输入n则继续猜
else printf("Sorry,I understand only y or n.\n"); //非n则告诉你输入错误重新输入
while(getchar() != '\n') continue; //处理掉其他多余字符
}
printf("I knew I could do it!\n");
return 0;
}
五.重定向
在默认情况下,C程序使用标准的I/O包查找标准输入作为输入源(stdin流)。而程序除了能从键盘输入数据外。还有两种方式
第一种:重定向文件。将文件内容输入到程序中和程序数据输出到文件中。
第二种:使用特定的函数打开文件,会文件进行一系列特定的操作。
在一章节我们主要讲解重定向操作,文件函数操作我们会在后面的章节在进行讲解。
1.重定向输入
比如我们有程序print.c。内容如下
它的功能就算打印输入的数据内容
这里我们在创建一个文本文件.名为data.txt
里面包含文本hello world
这里我将它们放置在同一个文件,这里注意是和可执行文件在一个文件夹当中
而可执行文件(vs 版本的)
红色下划线部分就算项目的存储地址。后面到Debug存放着项目可执行文件。
最后我们使用
.\Project1.exe < data.txt
.\Project1.exe就算执行可执行文件的格式 .\ + 可执行文件名
< 重定向输入符号
Data.txt就算输入文件
最后我们看到结果的确也可以正常打印出来。
2.输出重定向
这里和输入重定向一样。用 > 符号。但这里要记住用 > 会覆盖掉指定输出文件的内容。如果不想覆盖掉可以使用 >> 追加符号。下面我们来演示一下。如果指定的文件未创建,系统将会自动创建
在使用中>后。原本data.txt里面的内容被覆盖了
使用>>会发现原有的内容还在。
这里需要知道重定向是不允许多个文件同时重定向输入和输出的
这里我们在看一个例子。这里我们先看红色下划线部分。Data.txt负责重定向输入。而程序的打印结果重定向到print.txt当中。
而通过dir /b(列出当前目录中所以文件)可以看到之前print.txt文件是没有的。是在执行完重定向之后被自动创建的。而文件的内容和data.txt一样。
好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈