夏青虫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  • ctype.h系列字符函数

1. 字符判断函数

函数名 为如下参数时,返回值为真
isalnum() 字母或数字
isalpha() 字母
isdigit() 数字
isgraph() 除空格之外所有的可打印字符
islower() 小写字母
isprint() 可打印字符
ispunct() 标点符号(除空格和字符数字以外的可打印字符)
isspace() 空白字符
isupper() 大写字母

 

 

 

 

 

 

 

 

 

 

2. 字符映射函数

tolower(ch); //对ch没有影响
ch = tolower(ch); //把ch转换成小写
ch = toupper(ch); //把ch转换成大写
  • if和else配对

规则是如果没有花括号指明,else与和它最近的一个if相匹配。

  • stdbool.h
#include<stdbool.h>
int main(void)
{
    bool isprime;

    isprime = false;
    isprime = true;

    return 0;
}
  • C语言中的与或非

&& 与;|| 或;!非

当#include<iso646.h>时,可以用and,or,not代替以上。

!优先级高于乘法,与增量同级,仅次于括号;&&高于||,二者都低于关系运算符,高于赋值运算符。

  • 求值的顺序
apples = (1 + 3) * (3 + 5)
//可能先计算1+3,也可能先计算3+5
//当对逻辑运算符处理时,C保证逻辑表达式是从左至右求值。
//在程序从一个操作数进到下一个操作数之前,所有的副作用都会生效。
while((c=getchar()) != '' && c != '\n')

if (num !=0 && 12/num == 2)

while(x++ < 10 && x + y < 20)
  • 范围
if(range > 90 && range < 100) //这是对的

if(90 < range < 100) //错的
//这是个语义错误,而不是语法错误,它等价于
if((90<range) < 100) //即 if((1或0) < 100)
  • 条件运算符?:
max = (a > b) ? a: b;
//如果a大于b,那么max等于a,否则等于b
  • switch和break
//switch判断表达式应该具有整数值(包括char)
//case标签必须是整型(包括char)常量或者整数常量表达式。不能用变量
//补充:switch只做一次判断,一旦进入case环节,如果没有break就会循序执行下去,这一点与fortran不同
switch (integer expression) { case constant1: statements break; case constant2; statements break; default: statements }
  • goto

1. 首先,尽量不要使用它

2. 当有多层嵌套循环,想从里层跳出时,可以考虑用goto

3. C语言中的goto允许用描述性的单词,例如:

for...
    for...
        if...
            goto help

...
help: x = 1;
  •  缓冲区

缓冲分为两类:完全缓冲和行缓冲

完全缓冲:缓冲区满时被清空(内容被发送至其目的地),通常出现在文件输入中,缓冲区的大小取决于系统,但512字节和4096字节是常见的值;

行缓冲:遇到一个换行字符时将被清空缓冲区,键盘输入是标准的行缓冲,因此按下回车键将清空缓冲区。

  • 一个典型的键盘输入程序
int get_int(void)
{
    int input;
    char ch;
    while(scanf("%d", &input) != 1)
    {
        while((ch=getchar()) != '\n') //剔除缓冲区中的错误输入
            continue;
    }
    return input
}
  • 一个典型的文件输入程序
#include <stdio>
int main(void)
{
    int ch; //EOF=-1,所以不能用char类型,要用int
    FILE * fp;
    char fname[50];

    scanf("%s", fname);
    fp = fopen(fname, "r");

    while((ch=getc(fp) != EOF)
        putchar(ch);
    fclose(fp);
    return 0
}
  •  换行字符

在用getchar()时特别要注意,按下回车键的同时还将一个换行字符保存在缓冲区里。缓冲区里的东西不会自己消失,都要自行处理。例如:

int score;
char grade;
printf("Etner the score.\n");
scanf("%s", %score);
printf("Enter the letter grade.\n");
grade = getchar()
/*这里getchar读取的是一个换行字符,所以需要在getchar之前剔除换行字符,
具体方法上面有*/

 

posted on 2013-04-10 12:04  夏青虫  阅读(230)  评论(0编辑  收藏  举报