for 循环条件下的 getchar()

getchar() in a for loop condition

考虑以下代码:

int main()
{
    char c;
    for(;(c=getchar())+1;)
        printf("%c\n",c);
}

它获取我在终端中输入的字符并打印出来。当我在条件下删除 +1 时,程序运行但在 EOF (Ctrl+D) 信号时它不会停止。当我将其更改为 +2 同样的问题。

我的问题是 +1 是如何工作的?它与 getchar()for 循环有关吗?

那是因为EOF的int值是-1,所以你在做的就是循环,直到表达式(c=getchar())+1)得到值0,也就是你读取EOF(其中表达式的值为:-1+1=0)。同样正如 wll 在评论中指出的那样,你应该将 c 声明为 int,因为 getchar() returns int.

for 语句适用于已知的限制 如果你想要一个条件循环使用 while :

int main()
{
int c;
while ((c=getchar()) != eof())
    printf("%c\n",c);
}

它仅适用于 +1 的原因。

原型:int getchar(void);

Return 值

  • 成功后,读取的字符被 returned(提升为 int 值)。

  • return 类型为 int 以容纳特殊值 EOF,表示失败 (-1)。

  • 如果标准输入在文件末尾,函数returns EOF 并设置stdin 的eof 指示器(feof)。

  • 如果发生其他读取错误,该函数也会 returns EOF,但会设置其错误指示符 (ferror)。