if语句的问题

xvliang 2003-08-22 12:25:17
K&R的C程序设计语言中文版第37页的例程
void squeeze(char s[],int c)
{
int i,j;
for (i=j=0;s[i]!='\0';i++)
if (s[i]!=c)
s[j++]=s[i];
s[j]='\0';请问这条语句的条件是什么?是IF的为真时执行的码?格式按照书上的
}
...全文
109 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mooling 2003-08-22
  • 打赏
  • 举报
回复
同意
goodboy1881(三井)
很清楚
wbh0360 2003-08-22
  • 打赏
  • 举报
回复
和if无关,如果没有"{}"if只能管到";"
所以这里if不管为真,假都要执行
hellobcb 2003-08-22
  • 打赏
  • 举报
回复
无论如何都执行,就是给新的字符串加上结束标志!
紫郢剑侠 2003-08-22
  • 打赏
  • 举报
回复
改成下面这样就清楚了:

void squeeze(char s[],int c)
{
int i, j;

for (i=j=0; s[i]!='\0'; i++)
{
if (s[i] != c)
{
s[j++] = s[i];
}
}

s[j] = '\0';
}

其实你也可以在TC中通过单步执行功能来分析.
积木 2003-08-22
  • 打赏
  • 举报
回复
错了,我写错了,没看循环,ft
应该是
void squeeze(char s[],int c)
{
int i,j;
for (i=j=0;s[i]!='\0';i++)
{
if (s[i]!=c)
{
s[j++]=s[i];
}
}
s[j]='\0';请问这条语句的条件是什么?是IF的为真时执行的码?格式按照书上的
}
也就是说s[j]='\0'是独立在循环之外的语句,作用就是给字符串最后加上一个'\0'
紫郢剑侠 2003-08-22
  • 打赏
  • 举报
回复
下面这样写就清楚了:

void squeeze(char s[],int c)
{
int i,j;

for (i=j=0;s[i]!='\0';i++)
{
if (s[i]!=c)
{
s[j++]=s[i];
}
}

s[j]='\0';
}

积木 2003-08-22
  • 打赏
  • 举报
回复
将其修改一下
if (s[i]!=c)
{
s[j++]=s[i];
}
s[j]='\0'
这样逻辑就很明白了,无论s[i]是否与c相等,s[j]都要被赋值为'\0'

寻开心 2003-08-22
  • 打赏
  • 举报
回复
[i]!='\0'是判断是否字符串结束,字符串是以0作为结束的,但是当作数组还使用的时候,数组的长度可以和字符串的实际长度不一致,要判断结束就要有这个。
[i]='\0' 是赋值语句,不是判断语句
phchenjie 2003-08-22
  • 打赏
  • 举报
回复
是条独立的语句,没有条件。。
nirvana_li 2003-08-22
  • 打赏
  • 举报
回复
前面的同志都讲的很清楚了……
你知道的,在C语言中的字符串的结尾都要加入一个'\0'来表示字符串的结束,所以
s[j]='\0';
这个语句就是这个意思。它是一个独立的语句。:)
loyyer 2003-08-22
  • 打赏
  • 举报
回复
if直到后面的第一个分号就结束了。看看Purpleendurer(Purplenendurer)的
gucl79 2003-08-22
  • 打赏
  • 举报
回复
同意 jacklee794(李仔)
只是字符串后面加结束符而已。
yzb1000 2003-08-22
  • 打赏
  • 举报
回复
格式是人排的
你愿意怎么写就怎么写
关键是看语句
不要只看格式
这种问题建议你在TC里F7,一下就清楚了
Bandry 2003-08-22
  • 打赏
  • 举报
回复
I'm sorry.
jacklee794 2003-08-22
  • 打赏
  • 举报
回复
循环外的句子与里面的东西无关了,此句只是在字符串后面加结束符了,没什么条件

69,371

社区成员

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

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