【C语言学习】《C Primer Plus》第8章 字符输入/输出和输入确认
学习总结
1、缓冲区分为完全缓冲区(fully buffered)I/O和行缓冲区(line-buffered)I/O。对完全缓冲输入来说,当缓冲区满的时候会被清空(缓冲区内容发送至其目的地)。这类型的缓冲区通常出现在文件输入中。对于行缓冲I/O来说,遇到一个换行字符时将被清空缓冲区,键盘输入是标准的行缓冲区。
2、EOF是C对文件结尾的一个标识,在stdio.h头文件中定义,#define EOF (-1)。在使用键盘输入时,可以通过Ctrl+D模拟EOF信号:
#include <stdio.h>
int main(){
int ch;
while((ch=getchar())!=EOF){
putchar(ch);
}
return ;
}
Abc[Enter]
abc
123[Ctrl+D]123
3、>和<都是重定向运算符,必须是可执行程序加文件,拿以上程序为例子:
执行:./test > abc
输入:
abcdefg[Enter]1234567[Enter]
执行:cat abc
输出:
abcdefg
1234567
4、除了以上重定向运算符还有>>运算符,该运算符可使您的一个现有文件的末尾追加数据。还有管道运算符(|),其实这些运算符都是Unix和Linux上的运算符。
执行:./test >> abc
输入:
hijklmn[Enter]
执行:cat abc
输出:
abcdefg
1234567
hijklmn
执行:./test | grep aaa
输入:aaabbbccc[Enter]dddeeefff[Enter]ggghhhaaa[Enter]
输出:
aaabbbccc
ggghhhaaa
5、在创建与用户对话的程序时,需要考虑到所有的边界问题,例如程序只需要用户输入a、b、c、d的时候,万一用户输入量其他的且一大串的字符会如何处理等等情况。还有程序同时需要getchar进行字符输入和使用scanf进行数字输入,这两个函数中的每一个都能很好的完成其工作,但它们不能很好地混合在一起,这是因为getchar读取每个字符,包括空格、制表符和换行符,而scanf在读取数字时则会跳过空格、制表符和换行符。
6、编程题(题8)
#include <stdio.h> int getChoice(void);
int getFirst(void); int main(){
int ch,t,y;
float a,b;
int c;
char sa[],sb[]; ch=getChoice();
if(ch==){
return ;
}else{
printf("Enter first number:");
scanf("%s",sa);
while(sscanf(sa,"%f",&a)!=){
printf("%s is not an number.\nPlease enter a number.such as 2.5, -1.78E8, or 3:",sa);
scanf("%s",sa);
}
printf("Enter second number:");
scanf("%s",sb);
while(sscanf(sb,"%f",&b)!=||(ch==&&b==)){
if(ch==&&b==){
printf("Enter a number other than 0:");
}else{
printf("%s is not an number.\nPlease enter a number.such as 2.5, -1.78E8, or 3:",sb);
}
scanf("%s",sb);
}
} if(ch==){
printf("%s+%s=%.1f\n",sa,sb,a+b);
}else if(ch==){
printf("%s-%s=%.1f\n",sa,sb,a-b);
}else if(ch==){
printf("%s*%s=%s\n",sa,sb,a*b);
}else{
printf("%s/%s=%.1f\n",sa,sb,a/b);
} return ;
} int getChoice(void){
int ch;
printf("Enter the operation of your choice:\n");
printf("a. add b. subtract\n");
printf("c. multiply d.divide\n");
printf("q. quit\n");
ch=getFirst();
while(ch!=&&ch!=&&ch!=&&ch!=&&ch!=){
printf("Please enter a right choice:\n");
ch=getFirst();
} } int getFirst(void){
int ch;
ch=getchar();
while(getchar()!=)
return ;
return ch;
}
运行结果:
Enter the operation of your choice:
a. add b. subtract
c. multiply d.divide
q. quit
f
Please enter a right choice:
d
Enter first number:qqq
qqq is not an number.
Please enter a number.such as 2.5, -1.78E8, or 3:1
Enter second number:0
Enter a number other than 0:1
1/1=1.0
【C语言学习】《C Primer Plus》第8章 字符输入/输出和输入确认的更多相关文章
- C Primer Plus 第8章 字符输入/输出和验证输入 编程练习
1. #include <stdio.h> int main(){ char ch; int ct = 0; while ((ch=getchar()) != EOF) ct++; pri ...
- C Primer Plus学习笔记(七)- 字符输入/输出和输入验证
单字符 I/O:getchar() 和 putchar() getchar() 和 putchar() 每次只处理一个字符 getchar() 和 putchar() 都不是真正的函数,它们被定义为供 ...
- C Primer Plus 第4章 字符串和格式化输入/输出 编程练习
1. #include <stdio.h> int main(void) { ]; ]; printf("请输入您的名字: "); scanf("%s&quo ...
- C语言学习书籍推荐《C Primer Plus(中文版)(第5版)》下载
普拉塔 (Prata S.) (作者), 云巅工作室 (译者) <C Primer Plus(中文版)(第5版)>共17章,介绍了C语言的基础知识,包括数据类型.格式化输入输出.运算符.表 ...
- Go语言学习笔记四: 运算符
Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...
- 【C语言学习】《C Primer Plus》第1章 概览
学习总结 1.C语言于1972年由贝尔实验室的Dennis Ritchie在与Ken Thompson一起设计UNIX操作系统的时候开发的.的的设计构想来源于Ken Thompson的B语言.Anyw ...
- linux 下C语言学习路线
UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...
- 郝斌老师C语言学习笔记(一)
在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常 ...
- Unix和Linux下C语言学习指南
转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...
随机推荐
- KVC
KVC可以修改私有的属性,估计也是底层 操作的.
- 关于读取txt文件中文乱码问题
在处理文件的过程中,读取txt文件出现中文乱码.这种情况是由于编码字符不一致导致. public static string ReadFile(string path, string fileName ...
- VC++修改电脑系统时间
我们可以通过代码,对系统时间进行获取和修改. 我将介绍两种方法.第一种,通过SYSTEMTIME 代码实现: #include <windows.h> #include <iostr ...
- 协程,事件驱动,异步io模型,异步网络框架
协程是一种用户态的轻量级线程,内核不知道它的存在.协程运行于一个线程中,协程的切换是由用户控制的.线程的切换是由cpu来控制的,而协程的切换是由用户控制的.协程的执行时串行的. select/poll ...
- HTML5之tabindex属性
1 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&g ...
- java中super的两种用法
通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...
- 工程BUG记录
前天项目中,有个 id 对象,命名成了 initA... 从该页面点击进入其他时没有问题,但是在返回到该页面后,程序崩溃了,报了野指针,后来在跳转传值的时候,发现这个异常.我猜测原因可能是 xcod ...
- MySql之安装配置
1.解压Mysql.zip后,添加bin目录的环境变量 2.配置my.ini文件中的 # basedir =D:\mysql-5.6.24-winx64 # datadir = D:\mysql-5. ...
- 【权值线段树】bzoj3224 Tyvj 1728 普通平衡树
一个板子. #include<cstdio> #include<algorithm> using namespace std; #define N 100001 struct ...
- Centos 反向代理创建资料
1. yum update 2. sh centos.sh 3. sh upgrade_nginx.sh nginx 1.7.0 4. cd /usr/local/nginx/conf/ upload ...