while((ch=getchar())!='\n')是啥意思
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了while((ch=getchar())!='\n')是啥意思相关的知识,希望对你有一定的参考价值。
RT。
while((ch=getchar())!='\\n')意思就是输入的字符不是换行符,则为真,执行while里的语句块。
ch=getchar(),输入一个字符且将该值赋予给变量ch;ch=getchar())!='\\n'意思是ch不等于换行符。
()圆括号的优先级>不等于。
getchar是读入函数的一种。它从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。
扩展资料:
基本的优先级需要记住:
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
指针最优,单目运算优于双目运算。如正负号。
先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.
逻辑运算最后结合。
简单记就是:括号> ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。
参考资料:
百度百科-运算符优先级
这段代码解析为
将getchar()读取键盘输入的值赋给ch,然后在判断ch !='\n'
你看一下括号配对也可以理解了本回答被提问者采纳 参考技术B 循环读取一个字符,直到读取到'\n'结束('\n'也就是回车) 参考技术C ch应该是前边定义的一个char型变量,
getchar()是一个从缓冲区获取字符的函数,
\n是换行的转义字符,
相对完整的程序块应该是:
char ch;
while( ( ch=getchar() ) != '\n' )
//your code here
………… //用A代表这条语句
翻译一下你的句子就是:
当你从键盘输入的字符不是换行(回车)时,执行A代码。 参考技术D 重复读入一个字符,将读入的字符赋给ch,若读到回车符'\n',就结束循环。
为啥 `while ((ch = getchar()) != EOF)` 是常见的习语? [关闭]
【中文标题】为啥 `while ((ch = getchar()) != EOF)` 是常见的习语? [关闭]【英文标题】:Why is `while ((ch = getchar()) != EOF)` the common idiom? [closed]为什么 `while ((ch = getchar()) != EOF)` 是常见的习语? [关闭] 【发布时间】:2016-10-16 01:04:54 【问题描述】:为什么
while ((ch = getchar()) != EOF)
// stuff
比以下更常见/首选/考虑更好?
ch = getchar();
while (ch != EOF)
// stuff
ch = getchar();
我能想到一些赞成和反对的理由。
为:
更短。 一切都在条件下完成。 不能忘记在循环之前和结尾重写条件 循环。反对:
令人困惑。 循环中的分配(令人困惑?混乱?)。 循环条件中可能未初始化的变量(它得到 已分配,但这可能不会立即显而易见)。 比较和分配保持整齐分开,保持 第二种格式的“一条线,一项任务”的心态。 对于每个分配,都会有一个比较,因此复杂性 在这两种情况下都是相同的,因此更容易理解的形式 应该是首选。还有其他使用类似结构的例子吗?
我觉得这个问题会引发意见,所以我会要求以某种理由支持他们。粗略搜索后发现这个问题没有重复,所以我希望它不是重复的!
【问题讨论】:
我认为更好的方法是for(ch = getchar(); ch != EOF;ch = getchar())
我会使用 for(ch=getchar(); ch != EOF; ch=getchar()) 而不是第二种情况 编辑:^^ 从我嘴里说出来
不使用您的备用表单的原因是由于DRY principle。这也适用于今天似乎很流行的for
循环解决方案。
标准习语比在 for 循环解决方案中重复 getchar
调用更简洁明了。
帖子的2个选择省略了ch
的声明,很遗憾1)应该是int
而不是char
的常见错误2)它没有展示ch
的作用域,这通常是编写循环的考虑因素。
【参考方案1】:
您展示的代码很常见,因为它是在开创性的 K&R C 书中提出的。您可以在这里看到一个新手程序员对此感到困惑的示例:reading k&r(c book) and confusing 1st chapter code
我个人的偏好要么是这样,要么是这样:
for (int ch = getchar(); ch != EOF; ch = getchar())
或者这个:
for (int ch; (ch = getchar()) != EOF; )
有很多方法可以给猫剥皮。但 K&R 先剥了它的皮。
【讨论】:
你知道他们为什么提出这种特殊的形式吗?据推测,这是由于内存限制,并且希望代码尽可能简洁。while ((ch = getchar()) != EOF)
只扩展了getchar()
的宏形式一次,而不是几次;这是最好的。
@jamesh625 因为在编写 K&R 书时,作者还不知道什么是良好的编程实践和可读代码。正确的程序设计和可读代码的行业事实标准尚未确定。这本书写于 70 年代中期,年代久远,完全过时了。以上是关于while((ch=getchar())!='\n')是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
while((ch=getchar())!='\n')是啥意思