提问人:Udar 提问时间:2/27/2020 最后编辑:Udar 更新时间:2/27/2020 访问量:123
使用 int 作为 EOF 初始化一个 c,然后将其用于 getchar()?
Initialising a c with int as EOF and then using it for getchar()?
问:
标题几乎说明了一切。我有这个家庭作业代码(由讲师发送),用于拼写检查器,我不明白 c 是用 EOF 初始化的 int 然后将其用于 getchar() 的原因?这对我来说是新的,谢谢!(我里面什么都没有,因为把代码放在那里是我的任务,我被上面的问题卡住了)
int c = EOF;
while ((c = getchar()) && c != EOF) {
}
编辑:我被告知EOF只是为了在没有输入的情况下它不会进入while,但对我来说没有意义,因为如果c不使用getchar,while仍然未使用
答:
初始化在功能上不是必需的。
它具有具有初始化值的良好属性。可用于调试和避免未初始化的对象错误。但在这种情况下,代码可能是 、 、 、 ....没有功能差异。c
int c = 0;
int c;
int c = EOF;
int c = EOF;
while ((c = getchar()) && c != EOF) {
;
}
OP:我被告知 EOF 只是为了在没有输入的情况下它不会进入 while,但对我来说没有意义,因为如果 c 不使用 getchar,while 仍然未使用
如果没有输入,将赋给 ,覆盖 的初始化。在这种情况下,即使没有初始化,也不会输入循环体。c = getchar()
EOF
c
EOF
int c = EOF;
现在,辩论可以转移到“应该做什么”上,因为初始化在功能上是不需要的。这个问题和许多类似的问题最好通过您团队的编码标准来解决。缺乏团队标准,跟随客户(教授?缺乏这种领先优势,那就去做以下简单的事情:int c;
while ((c = getchar()) && c != EOF) {
是一种反模式,因为它在发生文件末尾或读取 null 字符时停止循环。@wildplasser以下比较常见,但选择取决于您的编码目标。
while ((c = getchar()) != EOF) {
OP:到目前为止,我只在使用 getchar() 时使用 char 初始化了变量,认为它必须是 char。
int getchar(void);
通常返回 257 个不同的值,并且 。将其保存到丢失的信息中。用。[0...UCHAR_MAX]
EOF
char
int
评论
while ((c = getchar()) && c != EOF) {
while
while ((c = getchar()) != '\n' && c != EOF) {
评论
while ((c = getchar()) && c != EOF) {
把所有这些塞进一行,你到底能得到什么?c
EOF
c
必须是 int,因为这是 getchar() 返回的内容。但是,初始化是无用的,因为它紧随其后的是赋值。