繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM