【C语言学习】《C Primer Plus》第8章 字符输入/输出和输入确认
2015-05-26 11:37
393 查看
学习总结
1、缓冲区分为完全缓冲区(fully buffered)I/O和行缓冲区(line-buffered)I/O。对完全缓冲输入来说,当缓冲区满的时候会被清空(缓冲区内容发送至其目的地)。这类型的缓冲区通常出现在文件输入中。对于行缓冲I/O来说,遇到一个换行字符时将被清空缓冲区,键盘输入是标准的行缓冲区。
2、EOF是C对文件结尾的一个标识,在stdio.h头文件中定义,#define EOF (-1)。在使用键盘输入时,可以通过Ctrl+D模拟EOF信号:
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)
运行结果:
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
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 0; }
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[10],sb[10]; ch=getChoice(); if(ch==113){ return 0; }else{ printf("Enter first number:"); scanf("%s",sa); while(sscanf(sa,"%f",&a)!=1){ 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)!=1||(ch==100&&b==0)){ if(ch==100&&b==0){ 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==97){ printf("%s+%s=%.1f\n",sa,sb,a+b); }else if(ch==98){ printf("%s-%s=%.1f\n",sa,sb,a-b); }else if(ch==99){ printf("%s*%s=%s\n",sa,sb,a*b); }else{ printf("%s/%s=%.1f\n",sa,sb,a/b); } return 0; } 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!=97&&ch!=98&&ch!=99&&ch!=100&&ch!=113){ printf("Please enter a right choice:\n"); ch=getFirst(); } } int getFirst(void){ int ch; ch=getchar(); while(getchar()!=10) return 0; 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 primer plus第8章(字符输入/输出和输入确认)习题
- 【C语言学习】《C Primer Plus》第13章 文件输入/输出
- C primer plus 第八单元-字符输入/输出确认
- C Primer Plus 第八章——字符输入/输出和输入确认
- C Primer Plus 第8章 字符输入/输出和验证输入 编程练习
- 【C语言学习】《C Primer Plus》第4章 字符串和格式化输入/输出
- 《C++ Primer Plus》第17章 输入、输出和文件 学习笔记
- C Primer Plus学习笔记----第四章字符串和格式化输入/输出
- 2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记
- (学习)C Primer Plus(3)——字符串和格式化输入/输出
- 2012/2/11 《C++ Primer Plus》第十七章:输入、输出和文件 学习笔记
- C语言学习_008_字符输出/输入和输入确认
- C语言学习笔记4-数据输入和输出
- [C++ Primer Plus]学习笔记--每次读取一行字符串输入
- 用c语言输入键盘上的字符后转换成十六进制输出
- C Primer Plus之文件输入/输出
- 4.从零开始学习C语言--C语言的输入(scanf)与输出(printf)
- 【c语言】从键盘输入BOY三个字符,然后把它们输出到屏幕
- c语言学习之结构篇代码示例-输入n个同学的姓名,数学英语成绩,按照平均分从低到高排序并输出
- C Primer Plus学习 二十三 字符串输入 gets ()函数