【问题标题】:Strange 10 value gets printed when I print inputed characters by their ASCII decimal code当我通过 ASCII 十进制代码打印输入的字符时,会打印出奇怪的 10 值
【发布时间】:2020-11-16 18:54:21
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int end;

    while(( end = getchar() ) != EOF ){
        printf("%d\n",end);
    }
    system("pause");
    return 0;
}

我想用这个代码打印字符的 ASCII 代码,但是每当我在它从我这里获取字符后运行代码时,它就会打印它的 ASCII 等价于十进制 10。例如,如果我运行代码并传递“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;
}

【问题讨论】:

  • 如果您使用的是 ASCII,我希望那里有 10,因为那是换行符 '\n' 的数值
  • 你按回车键了吧?
  • 补充问题:您想要/期望它打印什么? %d 表示整数以十进制打印,例如'\r' 将打印 13(即 ASCII CR,或回车),依此类推。

标签: c input ascii getchar


【解决方案1】:

如上所述,您分别打印'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,前提是您一次只输入一个字符。

【讨论】:

  • 谢谢@anastaciu,我懒得写一个完整的答案:) 更好的解释,所以我删除了评论。
  • “我怎样才能让代码不断获取字符,当我使用该代码时它只会获取一个字符并且循环结束”转到 onlinegdb 并在那里尝试。它工作正常。
  • @ErinçUtkuÖztürk 你在找noncanonical input processing mode吗?
  • 关于您对某人评论的免责声明 - 答案的正确位置在答案部分,而不是 cmets 部分:) +1
  • @DavidRanieri,仍然,信用到期:)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多