【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 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)

 1 #include <stdio.h>
 2
 3 int getChoice(void);
 4 int getFirst(void);
 5
 6 int main(){
 7         int ch,t,y;
 8         float a,b;
 9         int c;
10         char sa[10],sb[10];
11
12         ch=getChoice();
13         if(ch==113){
14                 return 0;
15         }else{
16                 printf("Enter first number:");
17                 scanf("%s",sa);
18                 while(sscanf(sa,"%f",&a)!=1){
19                         printf("%s is not an number.\nPlease enter a number.such as 2.5, -1.78E8, or 3:",sa);
20                         scanf("%s",sa);
21                 }
22                 printf("Enter second number:");
23                 scanf("%s",sb);
24                 while(sscanf(sb,"%f",&b)!=1||(ch==100&&b==0)){
25                         if(ch==100&&b==0){
26                                 printf("Enter a number other than 0:");
27                         }else{
28                                 printf("%s is not an number.\nPlease enter a number.such as 2.5, -1.78E8, or 3:",sb);
29                         }
30                         scanf("%s",sb);
31                 }
32         }
33
34         if(ch==97){
35                 printf("%s+%s=%.1f\n",sa,sb,a+b);
36         }else if(ch==98){
37                 printf("%s-%s=%.1f\n",sa,sb,a-b);
38         }else if(ch==99){
39                 printf("%s*%s=%s\n",sa,sb,a*b);
40         }else{
41                 printf("%s/%s=%.1f\n",sa,sb,a/b);
42         }
43
44         return 0;
45 }
46
47 int getChoice(void){
48         int ch;
49         printf("Enter the operation of your choice:\n");
50         printf("a. add          b. subtract\n");
51         printf("c. multiply     d.divide\n");
52         printf("q. quit\n");
53         ch=getFirst();
54         while(ch!=97&&ch!=98&&ch!=99&&ch!=100&&ch!=113){
55                 printf("Please enter a right choice:\n");
56                 ch=getFirst();
57         }
58
59
60 }
61
62 int getFirst(void){
63         int ch;
64         ch=getchar();
65         while(getchar()!=10)
66                 return 0;
67         return ch;
68 }

运行结果:

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

时间: 2024-11-22 20:13:39

【C语言学习】《C Primer Plus》第8章 字符输入/输出和输入确认的相关文章

C primer plus 第八单元-字符输入/输出确认

这一章主要说的是输入输出流的概念和对于输入输出的简单应用. 说过的概念: ·缓冲区 在使用控制台程序编写程序时,使用输入函数输入内容时,输入的内容总是会在键入换行符\n后才完成输入,之前不论增减还是更改“输入”的内容,都不会确定最终的输入结果.而在玩游戏或者实时的按键操作时,任何一个按键,点触和移动设备都会立即产生相应的响应.这两种方式分别为缓冲输入和非缓冲输入. ·重定向 对于一台计算机,其输入和输出的形式并不是唯一的.输入可以是来自键盘,文件,说不定还能来自什么引力波,短波,中波,长波,小宇

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

单字符 I/O:getchar() 和 putchar() getchar() 和 putchar() 每次只处理一个字符 getchar() 和 putchar() 都不是真正的函数,它们被定义为供预处理器使用的宏 getchar() 不带任何参数,它从输入队列中返回下一个字符 例如,下面的语句读取下一个字符输入,并把该字符的值赋给变量 ch ch = getchar(); 等同于 scanf("%c", &ch); putchar() 打印它的参数 例如,下面的语句把之前赋

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

1. #include <stdio.h> int main(void) { char first_name[40]; char last_name[40]; printf("请输入您的名字: "); scanf("%s", last_name); printf("请输入您的姓氏: "); scanf("%s", first_name); printf("%s, %s", last_name,

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

普拉塔 (Prata S.) (作者), 云巅工作室 (译者) <C Primer Plus(中文版)(第5版)>共17章,介绍了C语言的基础知识,包括数据类型.格式化输入输出.运算符.表达式.流程控制语句.函数.数组和指针.字符串操作.内存管理.位操作等,知识内容都针对C99标准:另外,<C Primer Plus(中文版)(第5版)>强化了对指针的讨论,并引入了动态内存分配的概念,也讨论了C预处理器和C库函数.高级数据表示(数据结构)方面的内容. 下载地址:点我 编辑推荐 作为

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

学习总结 1.C语言于1972年由贝尔实验室的Dennis Ritchie在与Ken Thompson一起设计UNIX操作系统的时候开发的.的的设计构想来源于Ken Thompson的B语言.Anyway,它70世纪所需产物,存在即合理. 2.因为UNIX&Linux都是基于C语言开发的,所以,C无所不在:游戏.操作系统.计算机语言.嵌入式.应用…… 3.C实现顺序:源码(.c)→编译器→目标代码(.obj)→链接器(代码库+启动代码)→可执行文件(Linux默认是.out文件,win是.exe

关于c语言学习 谭浩强的书

2007-11-16 13:22:58|  分类: PROGRAMME |  标签: |举报 |字号大中小 订阅 广大有志于从事IT行业的同志们,在你们进入这一行之前千万请看这篇文章!太经典了!对你绝对有启发! 千万别买谭浩强和等级考试的书!!!!!! 整理别人的言论,请大家踊跃讨论!!!!!!!!!!!! 1:书皮上面有那么多的牛人题词,估计也许是自己的水平太低. 2:ANSI只给了两种方式:int main(void) {/*...*/}和 int main(int argc, char *

linux 下C语言学习路线

转载:http://blog.csdn.net/xdw1985829/article/details/6817403 UNIX/Linux下C语言的学习路线. 一.工具篇 “公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具. 1.操作系统     在UNIX或Linux系统中学习C很方便,所以在开始您的学习旅程前请先选择一个UNIX或Linux操作系统,目前可供个人免费使用的UNIX或Linux

C语言学习之路

C语言学习之路之环境准备 Hello,大家好,我的专业是软件工程,自从大一的时候,和很多人一样,在懵懂中学习了C语言~哈,不过呢,这门语言是真的很基础,也很重要!所以呢,如果是想要在IT行业大显身手的话,就必须对这门语言有所了解.那么,开始我们的探索之路吧,GO~ 工欲善其事,必先利其器!要学好这门语言,我们需要几个工具:一,是一本参考书,本人推荐使用<C Primer Plus>这本书,个人觉得这本书写的很好,推荐大家入门使用,还有一本书是<深入理解C指针>:二,是一款好的编译器

大一上学期C语言学习心得总结

经过一个学期的C语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题.当然,每次成功将问题转换成代码都小有激动,虽然只是在黑框上输出了一些数字或是字符串. 编程,虽然还不是很懂,但总感觉不只是学习知识这么简单,更多给我的感受是它在潜移默化中培养了人的一种能力,用自己的话来讲就是一种”代码能力“.对于同一个问题,让大家去解开答案,可能经过一些纸笔的运算都能得出结果,但是如何把这个问题转化成代码,这就是一种能力,而仅仅是将问题转换成代码,这是较为浅层次的能力,更深层的便是通过优化