c-当我用ASCII十进制代码打印输入字符时,会打印出奇怪的10值


#include <stdio.h>
#include <stdlib.h>
int main()
{
int end;
while(( end = getchar() ) != EOF ){
printf("%dn",end);
}
system("pause");
return 0;
}

我想用这个代码打印字符的ASCII代码,但每当我在代码从我那里得到字符后运行代码时,它都会打印出十进制10的ASCII等价物。例如,如果我运行代码;a";,它将打印97和10。为什么它会打印10,其他所有字符也会出现这种情况。谢谢你的回答,作为一个后续问题,当我在输入字符计数器值增加2后添加计数器时,为什么会发生这种情况?

#include <stdio.h>
#include <stdlib.h>
int main()
{
int end;
int count=0;
while(( end = getchar() ) != EOF ){
printf("%dn",end);
count++;
printf("counter is now %dn",count);
}
system("pause");
return 0;
}

如前所述,您将分别打印'a''n'的ASCII十进制代码,这是因为在您的代码中,getchar读取stdin缓冲区中的所有字符,包括因按下Enter而出现的换行符。

你可以通过简单地让它被你的条件忽略来避免这种情况:

while((end = getchar()) != EOF && end != 'n'){
printf("%dn", end);
}

免责声明:大卫·拉涅利添加了一条与我写答案时完全相同的解决方案的评论(他善意地删除了(,这也归功于他。


关于您的评论问题和问题编辑:

如果你不想让'n'中断你的解析周期,你可以简单地把条件放在里面

while((end = getchar()) != EOF){
if(end != 'n'){ //now as 'n' is ignored, the counter increases by one
printf("%dn", end);
count++; 
printf("counter is now %dn",count);
}
}

计数器增加2的原因同样是因为解析了两个字符,无论您输入什么字符和换行符。正如您在示例中看到的那样,如果忽略'n',那么只要一次只输入一个字符,counter将只增加一个。

在ASCII中,换行符由值10表示。

每当您键入一系列字符并按ENTER键时,您将获得所键入的字母/数字/符号的ASCII值以及换行符的值10。

最新更新