2.7 问题
4 \40 的值是多少?\100、\x40、\x100、\0123、\x0123的值又分别是多少?
知识点:
转义符 | 含义 |
---|---|
\a | 警告字符。他将奏响终端铃声或者产生其他一些可听见或者可看见的符号 |
\b | 退格符 |
\f | 进纸符号 |
\n | 换行符号 |
\r | 回车符 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制数字。这个转义符表示的字符就是给定的八进制数值所代表的字符。 |
\xddd | 与上例相同,只是八进制换成十六进制 |
答: 假定使用的是ASCII字符集,存在下面相等关系。
\40 = 32 = 空格字符
\100 = 64 = ‘@’
\x40 = 64 = ‘@’
\x100 占据12位(尽管前三位为零)。在绝大多数机器上,这个值过于庞大,无法存储于一个字符内,所以它的结果因编译器而异。
\0123 由两个字符组成,‘\012’和‘3’。其结果因编译器而异。
\x0123 过于庞大,无法存储于一个字符内,其结果因编译器而异。
7 是非题:因为C(除了预处理指令外)是一种自由形式的语言,唯一规定程序应如何编写的规则就是语法规则,所以程序实际看上去的样子无关紧要。
答:有对有错。对:除了预处理指令之外,语言并没有对程序应该出现的外观施加任何规则。错:风格恶劣的程序难以维护或无法维护,所以除了极为简单的程序之外,绝大多数程序的编写风格是非常重要的。
2.8 编程练习
2 编写一个程序,它从标准输入读取C源代码,并验证所有花括号都正确地成对出现。注意:你不必担心注释内部、字符串常量内部和字符常量形式的花括号。
思路:简单的设置一个变量,初始化为0,出现左括号加一,出现右括号减一,最后判断如果为0表示成对出现,非零则是不成对出现。对于注释,如果出现“/”,“/”不对中间出现的进行计数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int count=0;
int flag = 1;
char ch;
while( (ch = getchar()) != EOF){
if(flag ==1 && ch == '/'){
flag = 0;
}else if(flag == 0 && ch == '/'){
flag = 1;
}
//左花括号始终是合法的。
if(flag == 1 && ch == '{'){
count ++;
}else if(flag == 1 && ch == '}'){
//右花括号只有当它和一个左花括号匹配时才是合法的。
if(count == 0){
printf("Extra closing brace!\n");
}else{
count --;
}
}
}
if(count == 0){
printf("成对");
}else{
printf("不成对(多出右括号)");
}
return EXIT_SUCCESS;
}