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.

逻辑运算最后结合。

简单记就是:括号> ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。

参考资料:

百度百科-运算符优先级

参考技术A 这样就表示你输入回车就跳出循环
这段代码解析为
将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')是啥意思

getchar函数,缓冲区以及while ((ch = getchar()) != EOF)

快速读入

c++ 快速读入

模板输入输出优化

一些小东西