首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中while循环中的逗号分隔表达式

C中while循环中的逗号分隔表达式
EN

Stack Overflow用户
提问于 2010-12-06 07:10:34
回答 5查看 7K关注 0票数 13

我从来没有见过这样一个语句。

代码语言:javascript
运行
复制
while(printf("> "), fgets(str, 100, stdin), !feof(stdin)) {
..
..
}

我在网上读到,当循环出来的条件是最右边的!那么,上面的 Then 语句相对于

代码语言:javascript
运行
复制
while(!feof(stdin))
{
       printf("> ");
       fgets(str, 100, stdin);
       ...
       ...
}

另外,当语句接受表达式时,1,1,1是C中的有效表达式吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-06 07:21:40

给出的两个循环没有相同的含义。通过以这种方式使用逗号运算符,作者能够指定应该在每次迭代中执行的代码,即使循环本身从未被输入。它更像是一个do ... while ()循环,或者类似于以下内容:

代码语言:javascript
运行
复制
 printf("> ");
 fgets(str, 100, stdin);
 while(!feof(stdin)) {
    ..
    ..

    printf("> ");
    fgets(str, 100, stdin);
 }
票数 18
EN

Stack Overflow用户

发布于 2010-12-06 07:13:43

最好把逗号运算符看作是一个操作符。就像+是一个运算符一样,所以2 + 3是一个表达式(它恰好导致5的值),,也是一个运算符,因此0, 1是一个有效的表达式(因为这是最后一个操作数),因此0, 1是一个1的值。

票数 4
EN

Stack Overflow用户

发布于 2010-12-06 07:25:42

你提议的修改是不对等的。这是:

代码语言:javascript
运行
复制
while (1) {
  printf("> ");
  fgets(str, 100, stdin);
  if (feof(stdin)) { break; }
  ...
  ...
}

相反,我建议把工作分解成一个函数:

代码语言:javascript
运行
复制
int get_input(char* buffer, int size) {
  printf("> ");
  fgets(buffer, size, stdin);
  return !feof(stdin);
}

while (get_input(str, 100)) {
  ...
  ...
} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4364044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档