C 存储在非EOF变量中的值是什么?

C 存储在非EOF变量中的值是什么?,c,C,以下代码中比较的值是多少 while ((c = getchar()) != EOF) if ( c == '\n') 我知道'\n'是一个常量变量,因为只有一个引号。我知道它代表ASCII表中字符的数值,对吗?这等于110。但是什么呢 ((c=getchar())!=EOF)返回 谢谢在c中,赋值操作返回右值,即等号右侧的值。因此,在本例中,c=getchar()返回字符是什么或EOF。关键点是c必须是int: int c; while ((c = getchar()) !

以下代码中比较的值是多少

while ((c = getchar()) != EOF)
        if ( c == '\n')
我知道
'\n'
是一个常量变量,因为只有一个引号。我知道它代表ASCII表中字符的数值,对吗?这等于110。但是什么呢

((c=getchar())!=EOF)
返回


谢谢

在c中,赋值操作返回右值,即等号右侧的值。因此,在本例中,c=getchar()返回字符是什么或EOF。关键点是
c
必须是
int

int c;

while ((c = getchar()) != EOF) { char read_value = c; /* ... */ }
假设
int
可以比
char
保存更多的值,或者至少比系统窄多字节编码使用的值更多*,并且
getchar
在读取更多数据失败时返回一个特殊常量
EOF
。否则,可以保证您可以将
c
转换为
char
,并获得读取的字符的值

c
本身声明为
char
,这是一个常见的错误,在这种情况下,循环可能永远不会终止,因为您可能无法捕获特殊值
EOF
,否则将有一个完全有效的字符,无法与
(char)EOF
区分

*)例如,如果
char
int
在给定的平台上都是32位宽,那么这将是非常好的,只要窄流只能返回值在[-128,128]范围内的单位,并且您可以使用
-200
作为
EOF
您的问题是:

但是什么是:
((c=getchar())!=EOF)
返回

表达式
((c=getchar())!=EOF)
是一个逻辑(或“布尔”)表达式-它是“真”或“假”。具体来说,它测试某个值是否不等于常量“EOF”

“something”是表达式
(c=getchar())
。这是一个赋值;它调用
getchar()
函数,并将返回值赋值给变量
c
。赋值的值就是赋值的值;因此,表达式作为一个整体导致以下情况发生:

  • 调用了
    getchar()
  • 其返回值分配给
    c
  • 然后将该值与常数
    EOF
  • 如果该值不等于
    EOF
    ,则
    while
    语句将继续运行

  • 看看这里:试试看,但没用..谢谢你是想问什么值
    EOF
    吗?谢谢你的回答@Kerrek!如果EOF输入不是EOF,它将返回一个int,然后如果“\n”也是int,那么语句将执行?我真的很想知道…如果唯一能使语句执行的东西s是如果两者都是整数,谢谢allot@user1959174:可以保证
    int
    可以保存
    char
    可以保存的所有值,
    char
    可以保存系统中所有可能的字符,包括换行符。明白了!感谢您的耐心:)@Kerrek,我确信这会让人讨厌与新手打交道questions@user1959174:这实际上很有趣,因为它迫使你确保你了解发生了什么,以便解释它。这是一个建立自信的好方法:-)谢谢@David,但是你能告诉我什么值与“\n”相比吗?我理解while语句,并试图理解什么值在(c=='\n')中进行比较不完全正确。赋值操作的值是已赋值的值。这可能与等号右侧的值不同,因为右侧的值转换为左侧的左值类型,并且此转换可以更改该值。