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章 字符输入/输出和验证输入 编程练习的更多相关文章

  1. 【C语言学习】《C Primer Plus》第8章 字符输入/输出和输入确认

    学习总结 1.缓冲区分为完全缓冲区(fully buffered)I/O和行缓冲区(line-buffered)I/O.对完全缓冲输入来说,当缓冲区满的时候会被清空(缓冲区内容发送至其目的地).这类型 ...

  2. C Primer Plus_第10章_数组和指针_编程练习

    1. /*rain.c 针对若干年的降水量数据,计算年降水总量.年降水平均量,以及月降水平均量*/ #include <stdio.h> #define MONTHS 12 #define ...

  3. C Primer Plus 第5章 运算符、表达式和语句 编程练习

    1. #include <stdio.h> ; int main(void) { int min, hour, lmin; printf("请输入分钟数: \n"); ...

  4. C Primer Plus_第8章_字符输入输出和输入确认_编程练习

    1.题略 #include <stdio.h> int main(void) { ; printf("Please enter text here(end with Ctrl + ...

  5. 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 ...

  6. C Primer Plus_第5章_运算符、表达式和语句_编程练习

    Practice 1. 输入分钟输出对应的小时和分钟. #include #define MIN_PER_H 60 int main(void) { int mins, hours, minutes; ...

  7. C Primer Plus_第四章_字符串和格式化输入输出_编程练习

    Practice 1.输入名字和姓氏,以"名字,姓氏"的格式输出打印. #include int main(void) { char name[20]; char family[2 ...

  8. Windows程序设计(第五版)学习:第四章 文本输出

    第四章 文本输出 1,客户区:整个应用程序窗口中没有被标题栏.边框.菜单栏.工具栏.状态栏和滚动条占用的区域.简而言之,客户区就是窗口中程序可以在上面绘制并向用户传达可视化信息的区域.   2,大多数 ...

  9. C++ Primer 5th 第2章 变量和基本类型

    *****代码在Debian g++ 5.3.1 / clang++ 3.8(C++11)下编写调试***** 由于部分编译器对标准遵循的不同以及自身额外的扩展,本章书中的少数知识点与实际实现存在偏差 ...

随机推荐

  1. 介绍几个好用的android自定义控件

    首先看效果图, 看下这两个界面,第一个中用到了一个自定义的FlowRadioGroup,支持复合子控件,自定义布局: 第二个界面中看到了输入的数字 自动4位分割了吧:也用到了自定义的DivisionE ...

  2. Android Studio 1.2.2设置显示行号

    Android Studio设置显示行号的方法与Eclipse有少许差别,直接在代码中右键,弹出右键菜单是没有显示行号功能的. 在Android Studio中设置方法有二: 1.临时显示行号 在单个 ...

  3. 【Java编程】Java中的大整数计算

    在上一篇文章中,我们实现了c语言中的大整数的运算,并且用Miller-Rabin算法实现了对大素数的测试.本来我准备用Java代码实现大整数的运算,查了一下资料发现Java中java.math的Big ...

  4. 苹果新的编程语言 Swift 语言进阶(十六)--泛型

    泛型允许你定义一个宽松.可重用的函数或者类型,使用泛型能够避免代码的重复,也能以更清楚和抽象的方式来表达程序的意图. 泛型是Swift语言提供的强大功能之一,Swift提供的许多标准库都使用了泛型来创 ...

  5. SpriteBuilder中如何简单的重置APP保存的数据

    在任意一款APP中,我们可能需要在磁盘上保存一些游戏数据,以便在下一次运行APP时恢复游戏数据. 但是由于在测试阶段,我们需要快速恢复初始状态的游戏数据,该如何做呢? 非常简单,只需要将APP从真机或 ...

  6. iOS多线程篇:NSThread简单介绍和使用

    一.什么是NSThread NSThread是基于线程使用,轻量级的多线程编程方法(相对GCD和NSOperation),一个NSThread对象代表一个线程, 需要手动管理线程的生命周期,处理线程同 ...

  7. 如何修改linux开机运行配置脚本

    开机运行级别的配置角本 /etc/inittab 开机运行级别  init 是切换运行级别的指令 0.关机              //init0 1.单用户模式(自动获取超级用户权限,无网络,无服 ...

  8. Android实训案例(二)——Android下的CMD命令之关机重启以及重启recovery

    Android实训案例(二)--Android下的CMD命令之关机重启以及重启recovery Android刚兴起的时候,着实让一些小众软件火了一把,切水果,Tom猫,吹裙子就是其中的代表,当然还有 ...

  9. 基于opencv的gpu与cpu对比程序,代码来自opencv的文档中

    原文链接: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/gpu/gpu-basics-similarity/gpu-basi ...

  10. SharePoint 使用技巧汇总与讨论

    1.  网站内容和结构(/_layouts/sitemanager.aspx) 自己使用SharePoint也有一年了,居然没有发现这个页面,鄙视自己一下,才发现这个页对数据进行操作,会方便很多,比如 ...