while()语句括号里面可以用表达式吗?

smcao 2007-07-24 09:14:07
int strcpy(*to.*form)
{
while( *to++=*form++);


}

这个函数是实现把字符串 form 的内容复制到字符串to中

while( *to++=*form++);这能够实现吗,是否正确,,,,若不正确你认为括号里应该怎样填啊
还可以填 *to++=*form++!='\0' 我觉得奇怪了,


while()语句 应该是跟条件 而这个 *to++=*form++ 确是表达式的付值语句,这样怎样判段呢?

还有在while();后面跟分号不会错了吗,跟了说明什么?*to++=*form++
...全文
1633 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
shu_yoyo 2007-07-26
  • 打赏
  • 举报
回复
可以的~~~
sdy3653232 2007-07-26
  • 打赏
  • 举报
回复
应该可以吧 ,不过建议你用gotoxy()的格式
char* strcpy(char *to, const char *from) {
assert(to != NULL & from != NULL);
char *des =null;
des=to;

while ((*des++ = *from++) != '\0');

to=des;
return to;
}
我也是新手,不知道这样做对不对
zkingjm 2007-07-26
  • 打赏
  • 举报
回复
补充一点:
while( 表达式 );
与下面的等价
while( 表达式 )
{
;
}

若表达式为真,则是一个死循环。
若表达式为假,则直接跳出。
zkingjm 2007-07-26
  • 打赏
  • 举报
回复
简单说明如下:
b = 10;
while( a = b )
{
b--;
}
以上代码当b=0时退出while循环。
geqwang 2007-07-25
  • 打赏
  • 举报
回复
当然可以了!
gotoxy 2007-07-25
  • 打赏
  • 举报
回复
可以!
不过Inhibitory的
char* strcpy(char *to, const char *from) {
assert(to != NULL & from != NULL);
char *des = to;

while ((*des++ = *from++) != '\0');

return to;
}

书写风格好些(个人认为)!不过from要++
xiantongyuan 2007-07-25
  • 打赏
  • 举报
回复
当然可以用表达式了,但是你要保证有判断语句,否则怎么让循环退出呢?
yangliu817 2007-07-25
  • 打赏
  • 举报
回复
赋值语句也是有值的,当碰到字符串末尾的结束符'\0'时,由于'\0' = 0,所以循环结束。
星羽 2007-07-25
  • 打赏
  • 举报
回复
当然可以

*to++=*form++

这个表达式是有返回值的,返回的值就是当前所赋的值

所有到from到达字符尾的时候,会把 \0 赋给 to 并返回 \0

\0 等于 0 跳出 while
fire_woods 2007-07-25
  • 打赏
  • 举报
回复
楼主的展开看会清楚些.

while(1)
{
unsigned char c = *form++;
*to++ = c;
if(c==0)
{
break;
}
}
alps_008 2007-07-25
  • 打赏
  • 举报
回复
用while要特别注意结束循环的条件
尤其你这样while(...);
循环里是空语句,没有条件break出去
那你()里的判断一定要有不成立的时候才行啊

不然又是昨天看到那种“……至今还在输出…… - -!”
cceczjxy 2007-07-25
  • 打赏
  • 举报
回复
可以的.
jixingzhong 2007-07-25
  • 打赏
  • 举报
回复
还有在while();后面跟分号不会错了吗,跟了说明什么?*to++=*form++

跟了说明 循环体是空语句。
jixingzhong 2007-07-25
  • 打赏
  • 举报
回复
while语句()内部只要其执行结果可以判断 bool 值就可以。

当然可以是表达式
daviddb7 2007-07-25
  • 打赏
  • 举报
回复
这个条件应该是在*to为0时退出吧
Inhibitory 2007-07-25
  • 打赏
  • 举报
回复
while( *to++=*form++);
*to++ = *from++,这个表达式的值永远为真,所以这个循环是不是结束的。
while语句中可以用表达式:

char* strcpy(char *to, const char *from) {
assert(to != NULL & from != NULL);
char *des = to;

while ((*des++ = *from) != '\0');

return to;
}
星羽 2007-07-24
  • 打赏
  • 举报
回复
while( *to++=*form++);

可以,你要确保

to 的大小大于等于 form
第八章 循环结构 8.1 理解循环结构 用程序解决循环问题时,为了正确设计循环结构主要思考这些问题: (1)需要重复哪些步骤,即循环体中包含哪些操作。 (2)对于循环次数能确定的,通常使用计数器控制循环。 (3)循环次数不确定时,利用标记控制循环,使循环不会无限次执行。 (4)如何修改条件,使循环条件的值趋于0。 8.2 循环语句 C程序用while语句、do-while语句、for语句实现循环结构。 8.2.1 while语句 while语句实现当型循环,一般形式: while(表达式) { 循环体语句; } 执行该语句时先求解表达式,根据其值判断是否执行循环体。若表达式值为逻辑真(非0),执行循环体,结束一轮循环后再次计算表达式,若值为真再次执行循环体。重复以上操作,直到表达式值为假(值为0),则结束循环,执行花括号后面的语句。 使用while语句实现循环结构,算法通常为: (1)在循环结构外设置条件变量,即为与循环条件相关的变量赋值; (2)测试循环条件,决定是否执行循环体,若其值为假结束循环; (3)执行循环体; (4)更新条件变量的值; (5)重复(2)(3)(4)。 例:用while语句实现求1~100的和。 #include int main() { int sum=0, /*累加和*/ i=1; /*计数器*/ while(i<=100) /*循环条件*/ { sum+=i; i++; /*修改条件变量*/ } printf("sum=%d\n",sum); return 0; } 运行结果: sum=5050 8.2.2 do=while语句 do-while语句实现直到型循环,一般形式: do{ 循环体语句; }while(表达式); 执行该语句时先执行一次循环体,然后判断表达式值是否为真,若为真继续执行循环体,直到表达式值为假,则结束循环,执行花括号后的语句。 例:用do-while语句实现求1~100的和。 #include int main() { int sum=0,i=1; do{ sum+=i; i++; }while(i<=100); /*注意不要忘记分号;*/ printf("sum=%d\n",sum); return 0; } 注意: (1)do-while语句括号后用分号结束,while语句括号后不能有分号,否则产生逻辑错误导致循环体为空,无法修改循环条件,造成无限循环。 (2)while语句循环体为1条语句时可省略{},但好的习惯是不缺省{}。 8.2.3 for语句 for语句时C程序中使用最广泛和最灵活的循环语句,一般形式: for(表达式1;表达式2;表达式3) { 循环体语句; } for语句执行过程: (1)执行表达式1;

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧