1 if 语句
#include <stdio.h>
int main(void)
{
const int FREEZING = 0;
float temperature;
int cool_days = 0;
int all_days = 0;
printf("Enter the list of daily low temperatures.\n");
printf("Use Celsius, and enter q to quit.\n");
while (scanf("%f", &temperature) == 1)
{
all_days++;
if (temperature < FREEZING)
cool_days++;
}
if (all_days != 0)
printf("%d days total: %.1f%% were below freezing.\n",
all_days, 100.0 * cool_days / all_days);
else
printf("No data entered!\n");
return 0;
}
2 字符输入函数
getchar() 和 putchar()
#include <stdio.h>
#define SPACE ' '
int main(void)
{
char ch;
printf("Enter string:\n");
while ((ch = getchar()) != '\n')
{
if (ch == SPACE)
putchar(ch);
else
putchar(ch + 1);
}
printf("\nDone!\n");
return 0;
}
执行结果如下
3 多重选择
if (expression)
statement
else if (expression)
statement
else if (expression)
statement
else
statement
注意,if else 总是与最近的语句相匹配。
4 逻辑运算符
优先级(非常重要):! > 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。
5 条件运算符
利用条件运算符,处理单复数的问题:
printf("You need %d %s of paint.\n", cans,
cans == 1 ? "can" : "cans");
这里,利用条件运算符,来给字符串赋值(单复数)。
6 循环辅助
1 continue 语句
使用 continue 的好处:可以减少程序的缩进。
如下所示:
2 break 语句(仅跳出当前层的循环)
比较 break 和 continue 语句
使用 break 的实例
#include <stdio.h>
int main(void)
{
float length, width;
printf("Enter the length of rectangle: \n");
while (scanf("%f", &length) == 1)
{
printf("Length = %.2f:\n", length);
printf("Enter its width:\n");
if (scanf("%f", &width) != 1)
break;
printf("Width = %.2f:\n", width);
printf("Area = %.2f:\n", length * width);
printf("Enter the length of rectangle: \n");
}
printf("All done, exit!!!\n");
return 0;
}
7 多重选择
swtich case 语句
带多重选择的 switch 语句
#include <stdio.h>
int main(void)
{
char ch;
int a_cnt, e_cnt, i_cnt, o_cnt, u_cnt;
a_cnt = e_cnt = i_cnt = o_cnt = u_cnt = 0;
printf("Enter some text, enter # to quit.\n");
while ((ch = getchar()) != '#')
{
switch (ch)
{
case 'a':
case 'A': a_cnt++;
break;
case 'e':
case 'E': e_cnt++;
break;
case 'i':
case 'I': i_cnt++;
break;
case 'o':
case 'O': o_cnt++;
break;
case 'u':
case 'U': u_cnt++;
break;
default:
break;
}
}
printf("total numbers: A E I O U\n");
printf(" %4d %4d %4d %4d %4d\n", a_cnt, e_cnt, i_cnt, o_cnt, u_cnt);
printf("All done, exit!!!\n");
return 0;
}
8 goto
c语言的goto语句:
goto语句的常规用法(要跳转的标签位置在上面)
#include<stdio.h>
int main(void)
{
int n;
pos_1:
printf("请输入一个正整数:");
scanf("%d", &n);
if (n < 0)
{
printf("输入错误!\n");
goto pos_1;
}
printf("成功输入正整数:%d\n", n);
return 0;
}
很多C语言的参考书,都不提倡使用 goto 语句,下面是使用 goto 语句比较好的应用场景。
1 在I2C写入时,通常要等待操作完成,才能继续写入,下面是goto的使用
int Sensors_I2C_WriteRegister(unsigned char slave_addr,
unsigned char reg_addr,
unsigned short len,
const unsigned char *data_ptr)
{
char retries=0;
int ret = 0;
unsigned short retry_in_mlsec = Get_I2C_Retry();
tryWriteAgain:
ret = 0;
ret = ST_Sensors_I2C_WriteRegister( slave_addr, reg_addr, len, ( unsigned char *)data_ptr);
if(ret && retry_in_mlsec)
{
if( retries++ > 4 )
return ret;
mdelay(retry_in_mlsec);
goto tryWriteAgain;
}
return ret;
}
上述程序,利用 goto 语句,尝试多次写入I2C。若 4 次仍失败,则退出。
2 函数内部使用(统一出口)
int getresult_use_goto()
{
int iResult = 0;
FILE* fp1 = NULL;
FILE* fp2 = NULL;
char* pMem1 = NULL;
char* pMem2 = NULL;
fp1 = fopen("C:\\file1", "rb");
if (NULL == fp1) goto End;
fp2 = fopen("C:\\file2", "rb");
if (NULL == fp2) goto End;
pMem1 = (char *)malloc(1000);
if (NULL == pMem1) goto End;
pMem2 = (char *)malloc(2000);
if (NULL == pMem2) goto End;
iResult = 1;
End:
if (fp1) fclose(fp1);
if (fp2) fclose(fp2);
if (pMem1) free(pMem1);
if (pMem2) free(pMem2);
return iResult;
}