C Primer Plus 第8章 字符输入/输出和验证输入 编程练习
1.
#include <stdio.h>
int main(){
char ch;
int ct = 0;
while ((ch=getchar()) != EOF)
ct++;
printf("%d characters read.", ct);
return 0;
}
2.
#include <stdio.h>
int main(){
char ch;
int ct = 0;
while ((ch = getchar()) != EOF)
{
if (ch >= 32){
putchar(ch);
printf("/%d ",ch);
ct++;
}
else if (ch == '\n'){
printf("\\n");
putchar(ch);
ct = 0; //因为要换新的一行了所以ct清0
}
else if (ch == '\t'){
printf("\\t");
ct++;
}
else //打印控制字符
{
putchar('^');
putchar(ch + 64);
printf("/%d ", ch);
}
if (ct == 10){
printf("\n");
ct = 0;
}
}
return 0;
}
3.
#include <stdio.h>
#include <ctype.h>
int main(){
char ch;
int a,b,c;
a = b = c = 0;
while ((ch = getchar()) != '#')
{
if (isupper(ch))
a++;
else if (islower(ch))
b++;
else c++;
}
printf("capital:%d lower case:%d other:%d", a, b, c);
return 0;
}
4.
#include <stdio.h>
#include <ctype.h> //用来区分字母和字母的大小写
#include <stdbool.h>
int main(){
char ch;
bool inword = false;
int n_chars = 0;
int n_words = 0;
int value;
while ((ch = getchar()) != '#')
{
if (isalpha(ch))
n_chars++;
if (!isspace(ch) && !inword)
{
inword = true; //开始一个新的单词
n_words++; //单词加1
}
if (isspace(ch) && inword)
inword = false; //单词结束
}
value = n_chars / n_words ;
printf("chars : %d\n", n_chars);
printf("words : %d\n", n_words);
printf("average value : %d", value);
return 0;
}
5.
#include <stdio.h>
//如果50太大,则50变为最大值。反之则为最小值。
int main(){
char ch;
int guess = 50, MAX = 100, MIN = 0;
printf("Uh...is your number is %d\n",guess);
while ((ch = getchar()) != 'y')
{
if (ch == 'b') {
MAX = guess;
guess = (guess + MIN) / 2;
printf("Well, then, is it %d\n",guess);
}
else if (ch == 'l') {
MIN = guess;
guess = (guess + MAX) / 2;
printf("Well, then, is it %d\n",guess);
}
else printf("Sorry, I understand only big , less , yes.\n");
while ((ch = getchar()) != '\n')
continue;
}
printf("I konw i could do it");
return 0;
}
6.
//重要!!
char get_first(void){
char ch;
while((ch = getchar()) == '\n')
continue;
while (getchar() != '\n')
continue;
return ch;
}
7.
#include <stdio.h>
char get_choice(void);
char get_first(void);
#define WORK_OVERTIME 40
#define RATE1 0.15
#define RATE2 0.20
#define RATE3 0.25
#define BREAK1 300.0
#define BREAK2 450.0
#define BASE1 (BREAK1 * RATE1)
#define BASE2 (BASE1 + ((BREAK2 - BREAK1) * RATE2))
int main(void) {
int hr;
char choice;
double wage,income,tax,wage2;
printf("------------------------------------------------------------------------\n");
printf("Enter the number number corresponding to the desired pay rate or action:\n");
printf("a) $8.15/hr b) $9.33/hr\n");
printf("c) $10.00/hr d) $11.20/hr\n");
printf("q) quit\n");
printf("------------------------------------------------------------------------\n");
printf("Please enter your choise:");
while (choice = get_choice() ){
if (choice == 'q')
break;
switch (choice){
case 'a': wage2 = 8.75;
break;
case 'b': wage2 = 9.33;
break;
case 'c': wage2 = 10.00;
break;
case 'd': wage2 = 11.20;
break;
}
printf("Please enter the hours:");
scanf("%d",&hr);
if (hr <= WORK_OVERTIME)
wage = hr * wage2;
else wage = WORK_OVERTIME * wage2 +((hr - WORK_OVERTIME) * wage2 * 1.5);
if (wage <= BREAK1){
tax = wage * RATE1;
}
else if (wage > 300 && wage <= 450 ){
tax = BASE1 + (wage - BREAK1) * RATE2;
}
else tax = BASE2 + (wage - BREAK2) * RATE3;
income = wage - tax;
printf("The wage: %.2f income:%.2lf tax:%.2lf\n", wage, income, tax);
printf("------------------------------------------------------------------------\n");
printf("Enter the number number corresponding to the desired pay rate or action:\n");
printf("1) $8.15/hr 2) $9.33/hr\n");
printf("3) $10.00/hr 4) $11.20/hr\n");
printf("5) quit\n");
printf("------------------------------------------------------------------------\n");
printf("Please enter your choise:");
}
return 0;
}
//get_choice 输入正确的符号
char get_choice(void){
char ch;
ch = get_first();
while (ch != 'q' && (ch < 'a' || ch > 'd')){
printf("Please enter the : a b c d q\n");
printf("Please enter your choise:");
ch = get_first();
}
return ch;
}
//get_first 读取第一个符号 扔掉其他符号
char get_first(void){
int ch;
ch = getchar();
while (getchar() != '\n')
continue;
return ch;
}
8.
#include <stdio.h>
char get_choice(void);
char get_first(void);
double get_number(void);
int main(void){
char choice;
double num1,num2,result;
while ((choice = get_choice()) != 'q'){
printf("Enter the first number:");
num1 = get_number();
printf("Enter the second number:");
num2 = get_number();
if (choice == 'a') {
result = num1 + num2;
printf("%.1lf + %.1lf = %.1lf\n", num1, num2, result);
}
if (choice == 's') {
result = num1 - num2;
printf("%.1f - %.1f = %.1f\n", num1, num2, result);
}
if (choice == 'm') {
result = num1 * num2;
printf("%.1f * %.1f = %.1f\n", num1, num2, result);
}
if (choice == 'd') {
if (num2 == 0) {
printf("Enter a number other than 0: ");
num2 = get_number();
result = num1 / num2;
printf("%.1f / %.1f = %.1f\n", num1, num2, result);
} else
printf("%.1f / %.1f = %.1f\n", num1, num2, result);
}
}
return 0;
}
char get_choice(void){
char ch;
printf("Enter the operation of your choice:\n");
printf("a. add s. subtract\n");
printf("m. multiply d. divide\n");
printf("q. quit\n");
ch = get_first();
while ((ch != 'a') && (ch != 's') && (ch != 'm') && (ch != 'd') && (ch != 'q')){
printf("Please choice such as a s m d q:");
ch = get_first();
}
return ch;
}
char get_first(void){
char ch;
while((ch = getchar()) == '\n')//ch = getchar();之前用的的是这个,结果总是把回车给ch
continue; //还总是检查不出来问题,终于找出来问题在哪里了。!!
while (getchar() != '\n')
continue;
return ch;
}
double get_number(void){
double num;
char ch;
while (scanf("%lf", &num) != 1){
while ((ch = getchar()) != '\n')
putchar(ch); //处理错误的输入。
printf("is not an number.\n");
printf("Please enter a number , such as 2.5, -1.78E8, or 3:");
}
return num;
}
C Primer Plus 第8章 字符输入/输出和验证输入 编程练习的更多相关文章
- 【C语言学习】《C Primer Plus》第8章 字符输入/输出和输入确认
学习总结 1.缓冲区分为完全缓冲区(fully buffered)I/O和行缓冲区(line-buffered)I/O.对完全缓冲输入来说,当缓冲区满的时候会被清空(缓冲区内容发送至其目的地).这类型 ...
- C Primer Plus_第10章_数组和指针_编程练习
1. /*rain.c 针对若干年的降水量数据,计算年降水总量.年降水平均量,以及月降水平均量*/ #include <stdio.h> #define MONTHS 12 #define ...
- C Primer Plus 第5章 运算符、表达式和语句 编程练习
1. #include <stdio.h> ; int main(void) { int min, hour, lmin; printf("请输入分钟数: \n"); ...
- C Primer Plus_第8章_字符输入输出和输入确认_编程练习
1.题略 #include <stdio.h> int main(void) { ; printf("Please enter text here(end with Ctrl + ...
- C Primer Plus_第6章_循环_编程练习
1.题略 #include int main(void) { int i; char ch[26]; for (i = 97; i <= (97+25); i++) { ch[i-97] = i ...
- C Primer Plus_第5章_运算符、表达式和语句_编程练习
Practice 1. 输入分钟输出对应的小时和分钟. #include #define MIN_PER_H 60 int main(void) { int mins, hours, minutes; ...
- C Primer Plus_第四章_字符串和格式化输入输出_编程练习
Practice 1.输入名字和姓氏,以"名字,姓氏"的格式输出打印. #include int main(void) { char name[20]; char family[2 ...
- Windows程序设计(第五版)学习:第四章 文本输出
第四章 文本输出 1,客户区:整个应用程序窗口中没有被标题栏.边框.菜单栏.工具栏.状态栏和滚动条占用的区域.简而言之,客户区就是窗口中程序可以在上面绘制并向用户传达可视化信息的区域. 2,大多数 ...
- C++ Primer 5th 第2章 变量和基本类型
*****代码在Debian g++ 5.3.1 / clang++ 3.8(C++11)下编写调试***** 由于部分编译器对标准遵循的不同以及自身额外的扩展,本章书中的少数知识点与实际实现存在偏差 ...
随机推荐
- Rust语言之HelloWorld Web版
Rust语言之HelloWorld Web版 下面这篇文章值得仔细研读: http://arthurtw.github.io/2014/12/21/rust-anti-sloppy-programmi ...
- wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果
上一篇介绍了贝塞尔曲线的简单应用 仿360内存清理效果 这一篇带来一个 两条贝塞尔曲线的应用 : 仿qq未读消息去除效果. 转载请注明出处:http://blog.csdn.net/wingicho ...
- Android自定义view进阶-- 神奇的贝塞尔曲线
上一篇介绍了自定义view需要知道的基本函数.新开一篇献给借给我vpn的深圳_奋斗小哥. 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/ ...
- Xp输入法不见了
早上打开电脑忽然发现以前的输入法(包括搜狗,智能ABC输入法)都不见了,光剩下微软拼音,而且添加输入法的按键是灰色的,不能使用 解决的办法: 打开记事本,输入以下内容: ___________ ...
- BezierDemo开源项目的学习
多看多学涨姿势,no zuo nuo die做暖男 1.概述 国际惯例,首先感谢一下开源作者. 这个项目主要是实现实现qq红点拖拽的效果 地址在https://github.com/chenupt/B ...
- 套接字编程相关函数(1:套接字地址结构、字节序转换、IP地址转换)
1. 套接字地址结构 1.1 IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中.下 ...
- cocos2d-x 游戏开发之有限状态机(FSM) (二)
cocos2d-x 游戏开发之有限状态机(FSM) (二) 1 状态模式
- 设置布局默认为LinearLayout,却成了RelativeLayout
GoogleXML布局文件前推荐布局LinearLayout新建布局XML文件根元素LinearLayout, 随着android发展工程师更推荐使用RelativeLayout布局式所新建XML布局 ...
- 运行Myeclipse时,如何删除IVM窗口
windows------>preference------>run/debug------->lauching--------->percpectives,改成never,n ...
- android wheelview实现三级城市选择
很早之前看淘宝就有了ios那种的城市选择控件,当时也看到网友有分享,不过那个写的很烂,后来(大概是去年吧),我们公司有这么一个项目,当时用的还是网上比较流行的那个黑框的那个,感觉特别的丑,然后我在那个 ...