gpt4 book ai didi

c - getchar() 不传递 EOF 并且 Ctrl+Z 不终止 Cygwin 上的程序

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:59 24 4
gpt4 key购买 nike

这是一个简单的程序,计算字符串、符号和单词。

使用 Cygwin,计算一切正常。

但是在启动时,在输入值后,程序不会打印 ncnwnl 并等待输入更多值。

EOF 更改为 13(Enter)无论如何都无济于事。

ctrl+Z 也很有用:程序正在停止,写成[n]+ Stopped,其中'n'总是不同的数。

代码是

#include <stdio.h>
#define IN 1
#define OUT 0


int main () {

char c;
int state;
int nc, nw, nl;
state = OUT;

while ((c=getchar()) != EOF) {
nc++;

if (c == 'n')
nw++;


if (c == '\n' || c == ' ' || c == '\t')
state = OUT;
else if (state = OUT){
state = IN;
nw++;
}

}
printf ("%d %d %d", nc, nl, nw);
}

最佳答案

getchar 返回 int,而不是 char。它必须这样做,因为它可以返回一个字符值或返回特殊值 EOF 以指示输入文件的结尾。由于 EOF 必须不同于 char 类型的所有值,因此它不具有 char 类型。因此,您需要将包含其返回值的变量定义为 int,而不是 char

在某些平台上,char 类型是有符号的,getchar 函数实际上并不返回字符值,而是将字符值环绕到一个非负值。实际上,这意味着 ASCII 字符没有改变,但在某些平台上,非 ASCII 字符被转换为 128 到 255 之间的值,而不是 -128 到 -1 之间的值。所以通常你需要将 getchar 的返回值转换为 char 当你将它用作字符时。在 char 类型是无符号的平台上,这不会改变任何东西,但在 char 类型是有符号的平台上,有必要避免字符 255 被误认为文件结尾。

int c;

while ((c = getchar()) != EOF) {

if (c == 'n') /* ok because 'n' is part of ASCII and thus always positive */

if ((char)c == some_other_char) /*cast needed in general*/

}

在 Cygwin 中,就像在其他类 Unix 系统中一样,在一行的开头按 Ctrl+D 表示输入结束。在 Windows 下,您需要按 Ctrl+Z(在 Cygwin 下,再次像在其他类 Unix 系统中一样,它会暂停程序:它已停止,但可以恢复使用命令 bg)。这些都不会向程序发送控制字符,它们会发送文件结束指示,C 的 getchar 实现将其转换为 EOF 值。

关于c - getchar() 不传递 EOF 并且 Ctrl+Z 不终止 Cygwin 上的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26192479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com