#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。