小问题
初学c
写了几个小程序
发现书写用 &&,||,! 的表达式(逻辑表达式?)来决定程序运行最难,
每次都想得不全,以至于程序运行之后都会出现很多分支,
要反复的修改才比较满意,但是老是担心还有另外的情况
没有考虑到。
请问各位在书写这样的表达时都用什么方法,有没有可以借鉴的?
是不是要把真值表列出来?
/* learning is more important than pointers */
main()
{
if( interested ){
up();
saysth;
receive( char thanks[] );
} else exit(0);
}
/* MYNAME STANDS FOR gates, linus have more money than me */
问题点数:54、回复次数:16Top
1 楼zoffor(该死,你那厮(Gat,Lin)比我有钱)回复于 2003-05-04 16:48:28 得分 0
up()
/* i am interested in it ,too */
/* 54 points stands for MAY 4TH. */Top
2 楼tiaya()回复于 2003-05-04 16:49:00 得分 4
不用吧?除非你的表达式非常复杂Top
3 楼yiminggw(某某鸟人)回复于 2003-05-04 16:55:45 得分 2
94Top
4 楼hitbabiq(仰天长啸)回复于 2003-05-04 17:02:42 得分 4
那就改用switch...case结构,用default来处理所有没有考虑到地分支Top
5 楼zoffor(该死,你那厮(Gat,Lin)比我有钱)回复于 2003-05-04 17:05:23 得分 0
大概有三四项吧
里面可能有赋值操作(函数返回)
还有==
可能还有指针(指向结构中的成员变量)
我本来想贴一些代码片段的,可忘记了
其中有一个是输入字符串和结构中的字符串匹配的,
我不知道有个cmpstr
所以自己写。好繁阿!
Top
6 楼shishiXP(诗人XP)回复于 2003-05-04 17:06:08 得分 2
多想想,多做做试验就知道了。
与和或而已Top
7 楼zoffor(该死,你那厮(Gat,Lin)比我有钱)回复于 2003-05-04 17:28:51 得分 0
switch case 不是也要判断它的值吗?
我记得一个(判断字符串相等):
x,y都是字符串:
while( ( x[i]==y[j] )!='\0' ){
++i;
++j;
}
思想:如果x[i],y[j]都为非0字符且相等,会继续比较;
如果x[i],y[j]不相等,会跳出循环。
但是后面出错了
因为我没想到当x[i],y[j]都等于'\0'时,它还会继续比较。
真希望这样的事情以后少出现,现在只是小程序,
如果以后程序大了,可就错漏百出了
Top
8 楼shishiXP(诗人XP)回复于 2003-05-04 18:23:02 得分 6
这个程序就是
while( x[i]==y[j])
{
++i;
++j;
}
搞那么复杂干吗? x[i]==y[i]的值不是1就是0;
'\0'的值就是0
Top
9 楼fengyuntianxia()回复于 2003-05-04 18:50:24 得分 4
老兄,你在哪找的题啊??Top
10 楼zoffor(该死,你那厮(Gat,Lin)比我有钱)回复于 2003-05-07 11:32:42 得分 0
To shishiXP(诗人XP) :
你的程序真的可以判断字符串是否相等吗?
while( x[i]==y[j])
{
++i;
++j;
}
如果x[i]和y[j]同时为'\0',x[i]==y[j]的值不是等于1吗,
不是还要++i,++j继续往后比较吗?
比如
char x[10]="china";
char y[10]="china";
当比较完‘a’时,x[i],y[j]继续比较(对吗?),
直到i==j==9还继续比较下一位,此时已超出字符串定义长度,
x[10],y[10]为任意值,于是得到字符串不等的结果。
小弟初学,愚钝之处请大虾们指教。
另:我的问题不只是针对这个问题(只是个例子),
我是希望能得到比较通用的写这类表达式的原则和方法。
To: fengyuntianxia()
我不知道你要问什么,是不是我的程序很ugly :) ?
都是我自己瞎写的。
Top
11 楼zoffor(该死,你那厮(Gat,Lin)比我有钱)回复于 2003-05-11 15:49:50 得分 0
再没人回我就揭帖啦。Top
12 楼tiaya()回复于 2003-05-18 10:55:04 得分 10
如果我不能确定一段代码是不是正确的时候,我会想办法尽量简化代码,让他看起来比较容易理解。
while( x[i]==y[j] ){
if (x[i] == '\0')return EQUL;
++i;
++j;
}
这样可能有点麻烦。等我熟悉了之后,就可以用更简洁的表示方式了
Top
13 楼wsSdj(小丁)回复于 2003-05-18 13:35:50 得分 10
如果将判断写在执行体里,别人就不好判断你循环的条件了(条件分断了)。
通常在看到while( x[i]==y[j] )时的第一反应就是 如果x的第i元素与y的第j元素相等则循环继续。
你可以在把条件加入while的判断中。
如:while( (x[i]==y[j]) && (x[i]!='\0'))
这样的条件就成了: 如果x的第i元素与y的第j元素相等,且,x的第[i]元素不为'\0'则循环Top
14 楼tiaya()回复于 2003-05-18 20:08:49 得分 2
to wsSdj(小丁)
这样当然也可以,不过不完整
strcmp的实现可以察看stl的说明(应该有吧,过几天好好看看)Top
15 楼cdocument(文档)回复于 2003-05-19 10:40:47 得分 10
拷贝字符串:
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ )
NULL ;
return address ;
}Top
16 楼zoffor(该死,你那厮(Gat,Lin)比我有钱)回复于 2003-07-22 09:10:30 得分 0
好久不上了
没想到有那么多旧账未结
昨晚通宵困了,先睡觉,下次上来再结啦,抱歉Top




