学习总结

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章 字符输入/输出和输入确认的更多相关文章

  1. C Primer Plus 第8章 字符输入/输出和验证输入 编程练习

    1. #include <stdio.h> int main(){ char ch; int ct = 0; while ((ch=getchar()) != EOF) ct++; pri ...

  2. C Primer Plus学习笔记(七)- 字符输入/输出和输入验证

    单字符 I/O:getchar() 和 putchar() getchar() 和 putchar() 每次只处理一个字符 getchar() 和 putchar() 都不是真正的函数,它们被定义为供 ...

  3. C Primer Plus 第4章 字符串和格式化输入/输出 编程练习

    1. #include <stdio.h> int main(void) { ]; ]; printf("请输入您的名字: "); scanf("%s&quo ...

  4. C语言学习书籍推荐《C Primer Plus(中文版)(第5版)》下载

    普拉塔 (Prata S.) (作者), 云巅工作室 (译者) <C Primer Plus(中文版)(第5版)>共17章,介绍了C语言的基础知识,包括数据类型.格式化输入输出.运算符.表 ...

  5. Go语言学习笔记四: 运算符

    Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...

  6. 【C语言学习】《C Primer Plus》第1章 概览

    学习总结 1.C语言于1972年由贝尔实验室的Dennis Ritchie在与Ken Thompson一起设计UNIX操作系统的时候开发的.的的设计构想来源于Ken Thompson的B语言.Anyw ...

  7. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

  8. 郝斌老师C语言学习笔记(一)

    在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常 ...

  9. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

随机推荐

  1. 转载 - Vultr VPS注册开通且一键快速安装PPTP VPN和电脑连接使用

    本文转载来自:https://www.vultrclub.com/139.html 从2014年Vultr VPS进入市场之后,作为有背景.实力的搅局者,是的最近两年VPS.服务器的用户成本降低.配置 ...

  2. Java多线程开发技巧

    很多开发者谈到Java多线程开发,仅仅停留在new Thread(...).start()或直接使用Executor框架这个层面,对于线程的管理和控制却不够深入,通过读<Java并发编程实践&g ...

  3. Hadoop2.6.0子项目hadoop-mapreduce-examples的简单介绍

    引文 学习Hadoop的同学们,一定知道如果运行Hadoop自带的各种例子,以大名鼎鼎的wordcount为例,你会输入以下命令: hadoop org.apache.hadoop.examples. ...

  4. iOS开发中的各种错误

    提交iTunesconnect遇到的问题: 1. error itms-90179 Invalid Code Signing. 解决:发现是发布正式被撤销了,重新生成发布Certificates,重新 ...

  5. 关于windows下QT以及QT creator的安装

    普及  之  windows下qt的安装及配置   qt介绍 : Qt,分为商业.开源两个版本,商业版需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才能生产动态 ...

  6. Bootstrap 折叠(Collapse)插件

    折叠(Collapse)插件可以很容易地让页面区域折叠起来.无论您用它来创建折叠导航还是内容面板,它都允许很多内容选项. 如果您想要单独引用该插件的功能,那么您需要引用 collapse.js.同时, ...

  7. pip 8 安装

    1.首先安装setuptools 2.再安装pip http://blog.csdn.net/u013372487/article/details/51726002

  8. node3

  9. python3下安装Django

    1.下载python3 https://www.Python.org/ 我下载的是Python3.5.1 选的 Windows x86-64 executable installer 2. 打开cmd ...

  10. 黑马程序员_Java基础:网络编程总结

    ------- android培训.java培训.期待与您交流! ---------- Java语言是在网络环境下诞生的,它是第一个完全融入网络的语言,虽然不能说它是对支持网络编程做得最好的语言,但是 ...