[英]Strange 10 value gets printed when I print inputed characters by their ASCII decimal code
#include <stdio.h>
#include <stdlib.h>
int main()
{
int end;
while(( end = getchar() ) != EOF ){
printf("%d\n",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("%d\n",end);
count++;
printf("counter is now %d\n",count);
}
system("pause");
return 0;
}
如上所述,您分别打印'a'
和'\\n'
的 ASCII 十进制代码,这是因为在您的代码中, getchar
读取stdin
缓冲区中的所有字符,包括由于您按下Enter而出现的换行符。
您可以通过简单地使其被您的条件忽略来避免这种情况:
while((end = getchar()) != EOF && end != '\n'){
printf("%d\n", end);
}
免责声明:大卫·拉涅利 (David Ranieri) 添加了一条评论,其中的解决方案与我在写我的答案时完全相同(他善意地删除了),因此也归功于他。
关于您的评论问题和问题编辑:
如果您不希望'\\n'
中断您的解析周期,您可以简单地将条件放在其中。
while((end = getchar()) != EOF){
if(end != '\n'){ //now as '\n' is ignored, the counter increases by one
printf("%d\n", end);
count++;
printf("counter is now %d\n",count);
}
}
计数器增加 2 的原因再次是因为解析了两个字符,无论您输入什么字符和换行符。 正如您在示例中看到的,如果您忽略'\\n'
,则counter
只会增加 1,前提是您一次只输入一个字符。
在 ASCII 中,换行符由值 10 表示。
每当您键入一个字符序列并按 ENTER 键时,您都会得到您键入的字母/数字/符号的 ASCII 值以及换行符的值 10。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.