8.1 单字符i/o:getchar()和putchar()
8.2 缓冲区
无缓冲输入:用户输入字符后,立即打印
缓冲输入:用户输入的字符被收集并储存在一个被称为缓冲区的临时存储区,按下Enter后,程序才可以使用用户输入的字符。
缓冲分为:完全缓冲I/O和行缓冲I/O。
完全缓冲I/O:缓冲区被填满时才刷新缓冲区。
行缓冲I/O:出现换行符时刷新缓冲区。
8.3 结束键盘输入
8.3.1 文件、流、键盘输入
文件:存储器中储存信息的区域。
流:实际输入/输出映射的一个理想化数据流。
8.3.2 文件结尾
1:以ctrl+z字符来标记文件结尾。
2:储存文件大小的信息。
c语言中getchar()读取到文件检测到文件结尾时将返回一个特殊的值即EOF(end of file)scanf()函数检测到结尾也返回EOF。
通常EOF定义在stdio.h文件中:
#define EOF (-1)
使用键盘输入EOF:要使用Ctrl+Z或Ctrl+D
8.4 重定向和文件
8.4.1 unix、linux、dos重定向
1.重定向输入
例:echo_eof<word echo_eof是一个可执行文件,word是一个文本文件。该目的是用文件替换键盘输入。
2.重定向输入
例:echo_eof>word 该目的是键盘读取的数据输出到word文件中。
3.组合重定向
echo_eof<myword>saveword 等同与echo_eof>saveword<myword.
遵守原则:
重定向运算符连接一个可执行文件和一个数据文件
不能读取多个文件的输入/输出
通常文件名和运算符之间的空格不是必须的。
8.5 创建更友好的用户界面
5.5.1 使用缓冲输入
例:当输入非‘y’的字符时,程序会打印一次“111111111”,但实际上打印了两次,程序读取输入字符后判断,然后还将换行符读取进行了一次判断。
while(getcha()!='y')
{
printf("1111111111")/*改变方法while(getchar()!='\n')continue;*/
}
8.5.2 混合数值和字符输入
当同时使用scanf和getchar时,scanf读取数字会跳过空格。
8.10 复习题
3.
#include<stdio.h>
int main()
{
int ch;
int i=0;
while (getchar()!='\n')
{
i++;
}
putchar(i);
return 0;
}
8.11 编程练习
2.
#include<stdio.h>
int main()
{
int ch, i=0;
for ( i = 1; (ch=getchar())!=EOF; i++)
{
if (ch>=' '|| ch=='\n'||ch=='\t')//32空格是一个界限,小于32的都是控制字符。
{
printf("%-5c",ch);
}
else
{
printf("^%-4c",ch+64);
}
printf("%-5d",ch);
if (i%10 == 0)
{
printf("\n");
}
}
return 0;
}
3.
#include<stdio.h>
#include<ctype.h>
int main(void)
{
int ch,i=0,j=0;
while ((ch=getchar())!=EOF)
{
if (islower(ch))
{
i++;
}
else if (isupper(ch))
{
j++;
}
if (ch=='\n')
{
printf("大写%d,小写%d",j,i);
}
}
return 0;
}
4.
5.理解二分法,当选择大于时要修该max,选择小于要修改min。
#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
int main (void)
{
float num=50;
bool bingo =false;
int i=0;
float max=100,min=0;
while (!bingo)
{
printf("number is %.2f\n",num);
printf("1.大了,2.小了,3.猜对了\n");
if ((scanf("%d",&i)==1)&&(i>=1&&i<=3))
{
switch (i)
{
case 1:
max=(min+max)/2;
num=(min+max)/2;
break;
case 2:
min=(min+max)/2;
num=(min+max)/2;
break;
case 3:
max=(min+max)/2;
num=(min+max)/2;
break;
}
}
else
{
printf("请输入正确格式\n");
}
}
return 0;
}
6.
#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
int main (void)
{
int ch;
bool bingo=false;
while (!bingo)
{
ch=getchar();
if(!isblank(ch))
{
bingo=true;
printf("第一个非空字符为%c",ch);
}
}
while (getchar()!='\n')
continue;
getchar();
return 0;
}
------------恢复内容结束------------
来源:https://www.cnblogs.com/suwencjp/p/12350253.html