Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何打印换行ASCII码?_C_Ascii - Fatal编程技术网

如何打印换行ASCII码?

如何打印换行ASCII码?,c,ascii,C,Ascii,正在尝试打印具有以下代码的十进制等效值\n(换行符)。当它被执行时,我按下回车键和Ctrl+Z键,但屏幕上没有打印任何内容。我希望印10张。我错过了什么 #include <stdio.h> int main() { char ch; while ((ch = getchar() != EOF)) { if (ch == '\n') { printf("\\n=%d\n", ch); }

正在尝试打印具有以下代码的十进制等效值
\n
(换行符)。当它被执行时,我按下回车键和Ctrl+Z键,但屏幕上没有打印任何内容。我希望印10张。我错过了什么

#include <stdio.h>
int main()
{
    char ch;

    while ((ch = getchar() != EOF))
    {
        if (ch == '\n')
        {
            printf("\\n=%d\n", ch);
        }
    }
}
#包括
int main()
{
char ch;
while((ch=getchar()!=EOF))
{
如果(ch='\n')
{
printf(“\\n=%d\n”,ch);
}
}
}
这将分配值
getchar()!=EOF
ch
。你可能想写:

while ((ch = getchar()) != EOF)
p.S.
ch
应该是
int
类型,因为
EOF
是一个负值,
char
不需要能够表示(
char
可能是
unsigned
),因此在某些系统上,如果
ch
是(错误的)
char
,您可能永远看不到该条件计算为false(因此,在这样的系统上会有一个无限循环)

这会将值
getchar()!=EOF
分配给
ch
。您可能想写:

while ((ch = getchar()) != EOF)

p.S.
ch
应该是
int
类型,因为
EOF
是一个负值,
char
不需要能够表示(
char
可能是
unsigned
),因此在某些系统上,如果
ch
是(错误的)
char
,您可能永远看不到该条件计算为false(因此,在这样的系统上会有一个无限循环)

关于
EOF
问题:事实上更糟糕的是,如果你签署了
char
-1
可能是一个有效字符,这将被误解为
EOF
@FelixPalmen,我同意循环无论哪种方式都是错误的,但是
char
未签署的
时的故障模式更有可能被注意到或被视为麻烦。与人们建议避免使用
scanf
的语气类似,我建议避免使用
getchar
,因为这个原因……你可以使用
fread
来改为使用
while(fread(&ch,1,1,stdin))来获得更清晰、更容易理解的代码
…@Applik欢迎来到StackOverflow。向上投票和打勾功能是我们感谢他人的方式,在这里…如果这个答案解决了您的问题,请单击“打勾”接受它作为您的解决方案。如果没有,请告诉我…但我认为它解决了您的问题。不客气。:)@Applik C有很多陷阱,但是如果我们避免允许它们的东西,C就会变得无用…缓冲区溢出,所以我们不应该使用数组或
strcpy
memcpy
或任何可能导致这些缺陷的东西…对吗?竞争条件,所以我们应该完全避免线程…
goto
,所以我们也应该避免这些…我们应该避免所有这些在这些可以用来编写糟糕代码的工具中,即使它们也可以以合理的方式使用……我们需要回到穴居人时代,使用石头和火,因为刀子太危险了……事实上,火也太危险了……石头……嗯,生活有它的陷阱……关于
EOF
问题:如果你有,事实上更糟有符号的
char
-1
可能是一个有效字符,然后会被误解为
EOF
@FelixPalmen我同意循环是有故障的,但是
char
无符号的
时的故障模式更容易被注意到或被视为麻烦对于
scanf
,我建议避免
getchar
,因为这个原因……您可以使用
fread
来获得更清晰、易于理解的代码,例如
while(fread(&ch,1,1,stdin))
…@Applik欢迎来到StackOverflow。upvote和tick功能是我们感谢他人的方式,在这里…如果这个答案解决了您的问题,请单击“tick”接受它作为您的解决方案。如果没有,请让我知道…但我认为它解决了您的问题。不客气。:@Applik C有很多陷阱,但如果我们避免了允许的陷阱,C变得无用。。。缓冲区溢出,所以我们不应该使用数组或
strcpy
memcpy
或任何可能导致这些溢出的东西。。。正当竞争条件,所以我们应该完全避免线程<代码>转到
,所以我们也应该避免。。。我们应该避免使用所有这些工具来编写糟糕的代码,即使它们也可以以合理的方式使用。。。我们需要回到穴居人时代,带着石头和火,因为刀子太危险了。。。事实上,火也太危险了。。。岩石。。。嗯,生活有它的陷阱。。。