练习1:编写一个统计空格、制表符、换行符个数的程序。
#include <stdio.h>
int main()
{
int blanks, tables, newlines; //定义空格计数变量 列表计数变量 行数计数变量
int done = 0; //用于指示从控制台输入是否完成,当接收到EOF(linux里面是ctrl+d)后,done被置1
int lastchar = 0; //用于保存最后一个输入字符,EOF不是输入的最后一个字符
int c; //用于保存控制台发送过来的一个数据
tables = 0; //变量初始化
blanks = 0;
newlines = 0;
while(done == 0) //while大循环,返回从控制台就收数据
{
c = getchar(); //接收一个int型变量
if(c == ' ') //如果是空格,blanks变量+1
++blanks;
if(c == '\t') //如果是制表符,tables变量+1
++tables;
if(c == '\n') //如果是回车,newlines变量+1,表示一行输入结束
++newlines;
if(c == EOF) //如果接收到结束
{
if(lastchar != '\n'){//判断EOF上一个字符是不是回车,如果不是回车,则行数加1,
//以防只输入一行的情况出现lines=0的情况;
//如果上一个字符是回车符,那说明Lines已经+1过了,所以直接跳出if语句,done置1,表示输入结束。
++newlines;
}
done = 1;
}
lastchar = c;
}
printf("Blanks: %d Tables: %d newlines: %d\n", blanks, tables, newlines); //打印
}
总结一
1
前置自增 ++i 的用法
a = ++i 相当于 i = i + 1; a = i;
比如:
int i = 0;
int a = ++i; //则a = 1, i = 1;
2
后置自增 i++ 的用法
a = i++ 相当于 a = i; i = i + 1;
比如:
int i = 0;
int a = i++; //则a = 0; i = 1
3
前置自减 –i 的用法
a = --i 相当于 i = i - 1; a = i;
比如:
int i = 10;
int a = --i; //则a = 9, i = 9;
4
后置自减 i– 的用法
a = i-- 相当于 a = i; i = i - 1;
比如:
int i = 10;
int a = i--; //则a = 10; i = 9;
5
i++和++i单独使用
i++和++i单独使用时都表示i=i+1,区别是++i先加1而i++先幅值,++i速度要快一点。
总结二
1
getchar()函数
函数getchar()从标准输入 stdin 获取一个字符(一个无符号字符)。
程序一:
#include <stdio.h>
int main()
{
int a;
a = getchar();
putchar(a);
putchar('\n');
return 0;
}
程序二:
#include <stdio.h>
int main()
{
char a;
a = getchar();
putchar(a);
putchar('\n');
return 0;
}
程序一执行结果:
a
a
程序一执行结果:
a
a
总结二
掌握这种程序思想:
while(循环标志)
{
if()
内部控制循环标志位改变,中断while循环
}