C语言学习《The C Programming Language》这里的习题答案跟原答案基本上完全不一样,可以做参考 不对的地方,烦请指正
练习1-1
运行"Hello World",有意去掉部分代码,查看错误信息.
/*
C语言基础学习第一个小程序
2014年5月7日17时01分09秒
*/
#include <stdio.h> //标准输入输出头文件
#include <Windows.h> //这个暂时还不明白,system("pause");这句不能用试了几次试出Windows.h
int main(void) //main函数返回值类型为int 参数void类型 暂时还不太明白void
{
printf("Hello World\n"); //printf输出函数,在头文件stdio.h内,stdio.h内有哪些函数慢慢再发掘
system("pause"); //这个system是个函数吧在Windows.h头文件里,慢慢再发掘这个头文件中的其它函数
return 0; //return返回值 更改返回值没发觉有异常
}
练习1-2
查看\c的作用
/*
C语言学习查看输义 \c 有什么作用
2014年5月7日17时14分34秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
printf("Hello World\c\n"); //貌似\c没什么作用 输出结果:Hello Worldc 多出来一个c,\没起作用
//经百度了解\后面的字符不是有效字符时默认将字符直接输出
printf("Hello World\a\a\n"); //\a音响发出嘟的声音
printf("Hello World\b\n"); //\b书上说是回退 但是没发觉出来
system("pause");
return 0;
}
练习1-3
修改温度转换程序,打印一个标题
/*
C语言学习 循环语句
2014年5月7日17时34分37秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
float fahr, celsius; //定义两个单精度变量
float lower, upper, step; //定义三个单精度变量
printf("%8s\t%8s\n", "华氏温度", "摄氏温度");
lower = 0;
upper = 300;
step = 20; //给变量赋值,为什么单精度的可以没有小数点,这不成整形了吗,以后再了解
fahr = lower;
while(fahr <= upper) //while语句 当条件成立走你,不成立滚蛋
{
celsius = (5.0/9.0) * (fahr-32.0);
printf("%8.0f\t%8.2f\n", fahr, celsius);//%这里有猫腻单单%f是输出单精度数据格式%8f,多了个8,让这个数据至少占8个字符,%.2f,是小数点取两位
fahr = fahr + step;
}
system("pause");
return 0;
}
练习1-4
摄氏温度转换为华氏温度
/*
C语言学习 循环语句
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
float fahr, celsius; //fahr为华氏温度,celsius为摄氏温度
float lower, upper, step; //lower为最低,upper为最高,step为步长
lower = 0;
upper = 300;
step = 20;
celsius = lower;
printf("%8s\t%8s\n", "摄氏温度", "华氏温度");
while(celsius <= upper)
{
fahr = 9.0 / 5.0 * celsius + 32.0;
printf("%8.0f\t%8.2f\n", celsius, fahr);
celsius = celsius + step;
}
system("pause");
return 0;
}
习题1-5
用for语句逆序打印温度转换表
/*
C语言学习 循环语句
2014年5月7日22时15分19秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
float fahr;
printf("%8s\t%8s\n", "摄氏温度", "华氏温度"); //for(fahr=300; fahr>=0; fahr = fahr-20)
for (fahr = 300; fahr >= 0; fahr = fahr - 20) //for (fahr = 300; fahr >= 0; fahr = fahr - 20)哪个显得更规范呢
{
printf("%8.0f\t%8.2f\n", fahr, (9.0/5.0 * fahr + 32.0));
}
system("dir C:"); // 感谢 看雪flze,让我懂得了system("cmd命令")函数的用法
system("pause");
return 0;
}
习题1-6 1-7
EOF的值的问题
/*
C语言学习 字符
2014年5月7日23时05分19秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
int c;
//char c;
//c = getchar();
//while(c != EOF)
//{
// putchar(c);
// c = getchar();
//}
while((c = getchar()) != EOF)
putchar(c); //这里不知道输入什么才能跳出循环除了强行结束Ctrl+C 回过头来再看
printf("%d\n", EOF); //EOF的值为-1
system("pause");
return 0;
}
遇到的第一个难题
期待前辈解答 感谢 谷月轩 在7楼解答
/*
C语言学习 字符
2014年5月7日23时26分32秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
int nc;
/*nc = 0;
while(getchar() != EOF)
++nc;*/
for(nc = 0; getchar() != EOF; ++nc) //无论如何跳不出循环,期待前辈解惑
;
printf("%d\n", nc);
system("pause");
return 0;
}
习题1-8
统计空格制表换行符个数程序
/*
C语言学习 字符
2014年5月7日23时39分23秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
int num = 0;
char c;
/*
while((c = getchar()) != EOF)
if(c==' ' || c=='\t' || c=='\n')
num++;*/ //while语句
int i;
for(i=0; (c=getchar())!=EOF; ++i) //for语句
if(c==' ' || c=='\t' || c=='\n')
num++;
printf("%d\n", num);
system("pause");
return 0;
}
习题1-9
多个空格用一个空格代替程序
/*
C语言学习 字符
2014年5月8日00时00分46秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
char c;
int num = 0;
/*while((c=getchar()) != EOF)
if(c == ' ')
{
++num;
if(num == 1)
putchar(c);
}
else
{
putchar(c);
num = 0;
}*/
int i;
for(i=0; (c=getchar())!=EOF; ++i)
{
if(c == ' ')
{
num++;
if(num == 1)
putchar(c);
}
else
{
putchar(c);
num = 0;
}
}
system("pause");
return 0;
}
/*
C语言学习 习题1-9优化代码
2014年5月8日00时24分02秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
char c, lastc;
lastc = NULL;
while((c=getchar()) != EOF)
{
if(c!=' ' || ' '!=lastc) //if(c!=lastc)所有重复输入都当成一个
putchar(c);
lastc = c;
}
system("pause");
return 0;
}
习题1-10
将制表符 回退符 反斜杠打印出来
/*
C语言学习 字符
2014年5月8日11时52分12秒
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
int c;
//printf("Hello World\b\b \n");//关于\b 感谢看雪 谷月轩 解答
while((c=getchar()) != EOF) //关于EOF 感谢看雪 谷月轩 解答 Ctrl+z输入EOF
if(c == '\t')
printf("\\t");
else if(c == '\b') //\b不知道为什么会检测不到 printf("\\b")不执行 不打印"\b"
printf("\\b");
else if(c == '\\')
printf("\\\\");
else
putchar(c);
system("pause");
return 0;
}
习题1-11
测试单词数目
/*
C语言学习 字符
2014年5月8日12时42分43秒
*/
#include <stdio.h>
#include <Windows.h>
#define OUT 0 //宏定义一个常量
#define IN 1
int main(void)
{
int c, nl, nw, nc, state;
nl = nw = nc = 0;
state = OUT;
while((c=getchar()) != EOF)
{
++nc; //nc为字符计数
if(c == '\n')
++nl; //nl为行计数
if(c==' ' || c=='\t' || c=='\n') //当字符为空格制表换行符时表明单词结束
state = OUT; //多个空格制表换行符的时候else if不执行
else if(state == OUT) //当输入有效字符时if不成立else if成立时即state = OUT
{
++nw; //nw为单词计数
state = IN; //将state = IN表明单词正在输入
}
}
printf("nc = %d\tnl = %d\tnw = %d\n", nc, nl, nw);
/*
不输入字符时 输入一个空格时 输入一个制表符时 输入一个换行符时 组合一下再试 一次输入多个空格制表换行时
看打印结果的变化
*/
system("pause");
return 0;
}
习题1-12
让单词换行输出
/*
C语言学习 字符
2014年5月8日13时16分01秒
*/
#include <stdio.h>
#include <Windows.h>
#define OUT 0
#define IN 1
int main(void)
{
int c, state;
state = IN;
while((c=getchar()) != EOF)
{
if(c==' ' || c=='\t')
state = OUT;
else if(state == OUT)
{
printf("\n%c", c);
state = IN;
}
else
putchar(c);
}
system("pause");
return 0;
}
习题1-13
解题:统计输入的内容,单词长度为1、2、3、4、5……的数目,并打印直方图出来
设计流程:
1.循环接收输入字符
1)判断是不是单词结束符号如果是
判断有没有超过单词上限如果是
使超出上限的变量+1
否则如果单词长度大于0
对应数组下标的变量+1
否则如果是单词标志为OUT
单词标志置为IN
单词长度置为1
否则
单词长度+1
2.找出数目最多单词数目
3.循环打印直方图
算出打印个数
循环打印
4.如果有就把超出单词上限的个数打出
感觉这一步跳的好远,真艰难
/*
C语言学习 字符
2014年5月9日00时38分00秒
*/
#include <stdio.h>
#include <Windows.h>
#define OUT 0
#define IN 1
#define MAXWORD 10 //单词最大长度
#define MAXHIST 20 //直方图最大长度
int main(void)
{
int c, i, j, nc, beyond, len, maxnum, state;//c获取字符nc单词长度计数,beyong超出最大长度的单词个数,maxnum出现次数最大值
int nw[MAXWORD];
nc = beyond = len = 0;
state = OUT;
for(i=0; i<MAXWORD; ++i)
nw[i] = 0;
while((c=getchar()) != EOF)
{
if(c==' ' || c=='\t' || c=='\n')
{
state = OUT;
if(nc >= MAXWORD)
++beyond;
else if(nc > 0)
++nw[nc-1];
}
else if(state == OUT)
{
state = IN;
nc = 1;
}
else
++nc;
}
maxnum = 0;
for(i=0; i<MAXWORD; ++i)
{
if(nw[i] > maxnum)
maxnum = nw[i];
}
i = 0;
while(i < MAXWORD)
{
len = nw[i]*maxnum/MAXHIST;
printf("出%4d次的有%4d个: ", i+1, nw[i]);
for(j=0; j<len; ++j)
{
printf("*");
}
printf("\n");
++i;
}
if(beyond > 0)
printf("beyond = %d\n", beyond);
system("pause");
return 0;
}
习题1-14
打印各个字符出现频度直方图
/*
C语言学习 字符
2014年5月9日12时26分39秒
*/
#include <stdio.h>
#include <Windows.h>
#define MAXWORD 128
#define MAXHIST 20
#define OUT 0
#define IN 1
int main(void)
{
int c, i, j, maxnum, len, state;
int nw[MAXWORD];
state = OUT;
for(i = 0; i < MAXWORD; ++i)
nw[i] = 0;
while((c = getchar()) != EOF)
{
if(c < MAXWORD)
++nw[c];
}
i = 0;
maxnum = 0;
while(i < MAXWORD)
{
if(nw[i] > maxnum)
maxnum = nw[i];
++i;
}
i = 0;
while(i < MAXWORD)
{
len = MAXHIST / maxnum * nw[i];
printf("%4d出现了%4d次: ", i, nw[i]);
for(j = 0; j < len; ++j)
{
printf("*");
}
printf("\n");
++i;
}
system("pause");
return 0;
}
习题1-15
利用函数重写温度转换
/*
C语言学习 字符
2014年5月9日12时56分58秒
*/
#include <stdio.h>
#include <Windows.h>
#define MAXVALUE 300
#define STEP 20
float convertfahr(float celsius); //忘记声明了参数可以省略celsius, float convertfahr(float);
int main(void)
{
int i;
float celsius, fahr;
printf("%8s\t%8s\n", "摄氏温度", "华氏温度");
/*
for(i = 0; i < MAXVALUE; i = i+STEP)
{
celsius = i;
fahr = convertfahr(celsius);
printf("%8.0f\t%8.2f\n", celsius, fahr);
}*/
/*
for(celsius = 0; celsius < MAXVALUE; celsius = celsius+STEP)
printf("%8.0f\t%8.2f\n", celsius, convertfahr(celsius));*/
celsius = 0;
while(celsius < MAXVALUE)
{
printf("%8.0f\t%8.2f\n", celsius, convertfahr(celsius));
celsius = celsius + STEP;
}
system("pause");
return 0;
}
float convertfahr(float celsius)
{
return (9.0 / 5.0) * celsius +32.0;
}
习题1-16
修改程序让程序可以无限输入行内容,并返回其实际长度
/*
C语言写学 数组
2014年5月9日15时03分56秒
*/
#include <stdio.h>
#include <Windows.h>
#define MAXLINE 10
int getline(char line[], int maxline);
void copy(char to[], char from[]);
int main(void)
{
int len; //行的长度
int max; //最大长度
char line[MAXLINE]; //输入行数组
char longest[MAXLINE]; //保存行数组
max = 0;
while((len = getline(line, MAXLINE)) > 0)//当前行长度大于0
{
printf("%s = %d\n", line, len);
if(len > max)
{
max = len;
copy(longest, line);
}
}
if(max > 0)
printf("%s\n", longest);
system("pause");
return 0;
}
//获取一个指定长度的输入行
int getline(char s[], int lim)
{
int c, i, j;
j = 0;
for(i = 0; (c=getchar())!= EOF && c!= '\n'; ++i)
{
if(j < lim-2) //用j来限制字符长度,而不管其实际长度i
{
s[j] = c;
++j;
}
}
if(c == '\n')
{
s[j] == c;
++i; //要求是统计行的长度 所以必须要有换行符
++j; //只是为了完成固定长度行的字符数组
}
s[j] = '\0';
return i; //返回的是其实际长度
}
//将指定行复制给另一个字符数组
void copy(char to[], char from[])
{
int i;
i = 0;
while((to[i] = from[i]) != '\0')
++i;
}
习题1-17
输出大于指定长度 的行
/*
C语言学习 数组
2014年5月9日15时24分13秒
*/
#include <stdio.h>
#include <Windows.h>
#define MAXLINE 10 //行上限
#define MAXLEN 8 //行字符限定值
int getline(char s[], int);
int main(void)
{
int len;
char line[MAXLINE];
while((len = getline(line, MAXLINE)) > 0)
{
if(len > MAXLEN)
printf("%s\n", line);
}
system("pause");
return 0;
}
int getline(char s[], int lim)
{
int c, i, j;
i = j = 0;
while((c = getchar())!=EOF && c!='\n')
{
if(j < lim-2)
{
s[j] = c;
++j;
}
++i;
}
if(c == '\n')
{
s[j] = c;
++j;
++i;
}
s[j] = '\0';
return i;
}
习题1-18
将行尾的空格制表符去掉
/*
C语言学习 数组
2014年5月9日15时59分29秒
*/
#include <stdio.h>
#include <Windows.h>
#define MAXLINE 10
int remove(char s[]);
int getline(char s[], int maxline);
int main(void)
{
int i, len;
char line[MAXLINE];
while((len = getline(line, MAXLINE)) > 0)
if((i = remove(line)) >= 0) //如果整行全是空格返回值为 -1
printf("%s%s\n", line, "结束"); //加个结束便于测试
system("pause");
return 0;
}
int remove(char s[])
{
int i = 0;
while(s[i] != '\n')
++i;
--i;
while(i>=0 && (s[i]==' ' || s[i]=='\t'))
--i;
//s[i+1] = '\n'; //测试时把这里注释掉
s[i+2] = '\0';
return i;
}
int getline(char s[], int maxline)
{
int c;
int i, j;
i = j = 0;
while((c = getchar())!=EOF && c!='\n')
{
if(j < maxline-2)
{
s[j] = c;
++j;
}
++i;
}
if(c == '\n')
{
s[j] = c;
++j;
++i;
}
s[j] = '\0';
return i;
}
习题1-19
将字符串倒序
/*
C语言学习 数组
2014年5月9日17时19分04秒
*/
#include <stdio.h>
#include <Windows.h>
#define MAXLINE 10
int reverse(char s[]);
int getline(char s[], int maxline);
int main(void)
{
int i, len;
char line[MAXLINE];
while((len = getline(line, MAXLINE)) > 0)
{
printf("%s", line);
reverse(line);
printf("%s\n", line);
}
system("pause");
return 0;
}
int reverse(char s[])
{
int i, j;
char a;
i = j = 0;
while(s[i]!='\n' && s[i]!='\0')
++i;
--i;
for(j = 0; j < i; ++j)
{
a = s[i];
s[i] = s[j];
s[j] = a;
--i;
}
}
int getline(char s[], int maxline)
{
int c;
int i, j;
i = j = 0;
while((c = getchar())!=EOF && c!='\n')
{
if(j < maxline-2)
{
s[j] = c;
++j;
}
++i;
}
if(c == '\n')
{
s[j] = c;
++j;
++i;
}
s[j] = '\0';
return i;
}
习题1-20
用等量的空格代替制表符
/*
C语言学习
2014年5月11日16时17分42秒
*/
#include <stdio.h>
#include <Windows.h>
#define TABNUM 8 //TAB键所代表的空格数目
int main(void)
{
int nc; //离下一空格位所需空格数目
int c;
nc = TABNUM;
while((c = getchar()) != EOF)
{
if(c == '\t') //如果输入的是制表符
{
while(nc > 0)
{
putchar(' ');
--nc;
}
}
else if(c == '\n' || c == '\t') //如果遇到换行 //[COLOR="Red"]程序有点问题 没有处理遇到制表符该如何处理 处理方法跟换行一样所以加这里[/COLOR]
{
putchar(c);
nc = TABNUM; //将nc = TABNUM
}
else //如果输入的不是制表符
{
putchar(c); //输出字符
--nc; //离下一制表位-1字符
if(nc == 0) //当nc = 0 则为下一制表符开始位置
nc == TABNUM; //将nc = TABNUM
}
}
system("pause");
return 0;
}
习题1-21程序设计
多个空格替换成制表加空格组合
将一定数目的空格替换成合适数目的制表符+空格
宏定义 TABNUM 8
变量 nc 保存距下一制表位所需空格
变量 nz 保存空格数目
遇到空格开始计数
如果是空格 停止输出开始计数
不是空格了如果空格数量大于0
判断空格是不是大于等于nc
如果大于 取(nz - nc) / TABNUM + 1 为制表符数目
(nz - nc) % TABNUM 为空格输出数目
如果不大于原数目输出空格
处理换行符制表符情况
否则输出其它字符
如果一个空格或者一个制表符都能到达用制表符 如果出现意外情况时 一个空格到不到指定位置 但一个制表符能到达
/*
C语言学习 字符
2014年5月11日17时40分21秒
*/
#include <stdio.h>
#include <Windows.h>
#define TABNUM 8
int disposespace(int space, int tab, const int n);
int main(void)
{
int c;
int nc, nz;
nc = TABNUM;
nz = 0;
while((c = getchar()) != EOF)
{
if(c == ' ')
{
++nz;
}
else if(c == '\t' || c == '\n') //设计的套路跟实现的套路有差别啊,是设计的少么?
{
if(nz > 0)
disposespace(nz, nc, TABNUM);
nz = 0;
putchar(c);
nc = TABNUM;
}
else
{
if(nz > 0)
{
nc = disposespace(nz, nc, TABNUM);
nz = 0;
}
putchar(c);
--nc;
if(nc == 0)
nc = TABNUM;
}
}
system("pause");
return 0;
}
/*用了个处理空格的函数,返回离下一制表符位字符数*/
int disposespace(int space, int tab, const int n)
{
int nt, nb, i;
i = n;
if(space >= tab)
{
nt = (space - tab) / n + 1;
while(nt > 0)
{
putchar('\t');
--nt;
}
nb = (space - tab) % n;
while(nb > 0)
{
putchar(' ');
--nb;
--i;
}
}
else
{
while(space > 0)
{
putchar(' ');
--space;
++i;
}
}
return i;
}
习题1-21时钟原理
/*
C语言学习 习题1-21不用函数
2014年5月11日21时53分43秒
思路:nc变量就像时钟一样 除了制表符 换行符复位以外 其它字符都要走动
如果是空格的时候没到制表位 用nz变量统计空格数目 到了制表位就可以用制表符
直接到达 然后nc复位 nz清0, 如果不是空格符 是其它字符就选判断空格计数器 nz
是不是大于0 如果是就补上空格
*/
#include <stdio.h>
#include <Windows.h>
#define TABNUM 8
int main(void)
{
int nc, nz; //nc 为固定制表位计数 nz 为多余空格计数
int c;
nc = TABNUM;
nz = 0;
while((c = getchar()) != EOF)
{
if(c == ' ') //字符是空格先不输出 碰到制表位就输出制表符
{
--nc;
++nz;
if(nc == 0)
{
putchar('\t');
nc = TABNUM;
nz = 0;
}
}
else if(c == '\t' || c == '\n')
{
while(nz > 0)
{
putchar(' ');
--nz;
}
putchar(c);
nc = TABNUM;
}
else
{
while(nz > 0)
{
putchar(' ');
--nz;
}
putchar(c);
--nc;
if(nc == 0)
nc = TABNUM;
}
}
system("pause");
return 0;
}
习题1-22
行太长的时候 要求在指定列换行 同时换行前的字符不能为空格及制表符
/*
C语言学习 字符
2014年5月11日22时40分36秒
nc行字符计数
ns空格计数 nc + 1
nt制表符计数nc + TABNUM
遇到空格或者制表符 计数开始 没到指定列不处理 如果到了 就换行nc先清0 以重新计算
输出指定空格数及制表符
遇到换行 nc清零 如果有空格及制表符 就输出
如果是字符 如果有空格及制表符 先输出(这里nc不能清零) 再输出新字符 如果到了指定列换行
[COLOR="Magenta"]这程序写的 好啰嗦,肯定有更好的思路[/COLOR]
*/
#include <stdio.h>
#include <Windows.h>
#define TABNUM 8 //制表符长度
#define ENDNUM 55 //指定列长度
int main(void)
{
int nc, ns, nt; //nc字符计数 ns空格计数 nt制表符计数
int c;
nc = ns = nt = 0;
while((c = getchar()) != EOF)
{
if(c == ' ' || c == '\t')
{
if(c == ' ')
{
++nc;
++ns;
}
else if(c == '\t')
{
nc = nc + TABNUM;
++nt;
}
if(nc = ENDNUM)
{
putchar('\n');
nc = 0;
while(ns > 0)
{
putchar(' ');
--ns;
++nc;
}
while(nt > 0)
{
putchar('\t');
--nt;
nc = nc + TABNUM;
}
}
}
else if(c == '\n')
{
nc == 0;
while(ns > 0)
{
putchar(' ');
--ns;
++nc;
}
while(nt > 0)
{
putchar('\t');
--nt;
nc = nc + TABNUM;
}
}
else
{
while(ns > 0)
{
putchar(' ');
--ns;
}
while(nt > 0)
{
putchar('\t');
--nt;
}
putchar(c);
++nc;
if(nc == ENDNUM)
{
putchar('\n');
nc = 0;
}
}
}
system("pause");
return 0;
}
习题1-23
删除所有注释
/*
C语言学习
2014年5月12日16时50分24秒
首先 判断遇到反斜杠/
后面的字符跟的是*则是遇到注释头
后面跟的双是一个反斜杠是//注释
否则是代码正常输出
*/
#include <stdio.h>
#include <Windows.h>
int main(void)
{
int c, d;
d = NULL;
while((c = getchar()) != EOF)
{
if(c == '/')
{
if((d = getchar()) == '*')
{
while((c = getchar()) != '*' || (d = getchar()) != '/')
;
}
else if(d == '/')
{
while((c = getchar()) != '\n')
;
}
else
{
putchar(c);
putchar(d);
}
}
else
{
putchar(c);
}
}
system("pause");
return 0;
}
习题1-24
查找圆括号 方括号 花括号 不配对错误
/*
C语言学习
2014年5月12日18时07分40秒
正确处理几种情况 单双引号 注释 转义字符序列还不太懂转义字符
出现单引就skipcount函数 直到匹配到另一个单引
出现双线就skipcount函数 直到匹配到另一个双引
碰到反斜杠skipcount函数 跳过一个字符 免得转义单双引(\' \")出现配不了对
正常情况下通过加减计数 来判断圆括号 方括号 花括号 有没有配对
大中小括号计数 < 0 提示错误 结束不等于0提示错误
*/
#include <stdio.h>
#include <Windows.h>
void skipcount(char c);
int main(void)
{
int round, square, flower;
int c;
round = square = flower = 0;
while((c = getchar()) != EOF)
{
if(c == '\'' || c == '\"' || c == '\\')
{
putchar(c);
skipcount(c);
}
else
{
putchar(c);
if(c == '(' || c == '\)')
if(c == '(')
++round;
else
{
--round;
if(round < 0)
printf("圆括号不配对");
}
else if(c == '[' || c == ']')
if(c == '[')
++square;
else
{
--square;
if(square < 0)
printf("方括号不配对");
}
else if(c == '{' || c == '}')
if(c == '{')
++flower;
else
{
--flower;
if(flower < 0)
printf("花括号不配对");
}
}
}
if(round != 0)
printf("圆括号不配对");
if(square != 0)
printf("方括号不配对");
if(flower != 0)
printf("花括号不配对");
system("pause");
return 0;
}
void skipcount(char c)
{
if(c == '\'')
while((c = getchar()) != '\'')
putchar(c);
else if(c == '\"')
while((c = getchar()) != '\"')
putchar(c);
else
c = getchar();
putchar(c);
}
第一章结束了 贴子太长了 为什么代码不能收缩回去呢 看的时候再展开多好啊
第二章地址
http://bbs.pediy.com/showthread.php?p=1284023#post1284023
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)