标准文件:
通常把显示器成为标准输出文件,printf 就是向这个文件输出数据(就是输出到显示器)
通常把键盘称为标准输入文件,scanf 就是从这个文件中读取数据
文件 硬件设备
stdin 标准输入文件一般指键盘,scanf() 、getchar() 等函数从stdin 获取输入
stdout 标准输出文件,一般指显示器 printf() 、putchar() 等函数默认向stdout 输出数据
stderr 标准错误文件,一般指显示器; perror() 等函数默认向stderr 输出数据
stdprn 标准打印文件,一般指打印机
缓冲区:指在程序执行时,所提供的一块存储空间(在内存中),可用来暂时存放做准备执行的数据。它的设置是为了提高存取效率,因为内存的存取效率速度比磁盘的驱动速度快得多。
下面示例stdin 是怎么回事,要求算出一行输入多少个字符
int main()
{
int sum = 0;
char ch = '0';
while (getchar() != '\n')
{
sum = sum + 1;
}
printf("sum : %d\n", sum);
return 0;
}
要想打印几行然后计算字符个数应该怎么办?
采用EOF 代表的是输入结束
int main()
{
int sum = 0;
char ch = '\0';
while (getchar() != EOF)
{
sum++;
}
printf("sum : %d\n", sum);
return 0;
}
输入完毕后输入换行符,然后同时按下CTRL + c 就可以了
当你输入abcd
1234
%&*(
再按下ctrl + c时 显示的是sum = 15 因为把\n 也算进去了,三行每行后面都有一个\n
但缓冲区也有缺点,看下例
int main()
{
int x = 0;
int sum = 0;
char ch = '\0';
do
{
printf("input a vable : \n");
scanf_s("%d",&x);
sum = sum + x;
printf("是否转换(y/Y)\n");
ch = getchar();
} while (ch == 'y' || ch == 'Y'); //注意do{}while(); 要加分号
printf("sum : %d \n", sum);
return 0;
}
当你输入12 按下回车时询问你是否继续,但是你想继续按y接着输入,已经给出了结果,为什么呢?
因为具有缓冲区的原因,当你输入12 按下回车,就是\n 此时\n 会存放在缓冲区里面,因此ch就从\n继续读,\n 的ASCII 值为10 ,而y/Y并不是,因此会直接结束。