使用 getchar() 额外数字将 char 转换为 Int

标签 c ascii

我想将 char 转换为 int。但是当我使用通常的方式

convertedInt = c - '0'; 

打印结果时我得到一个额外的负数。例如,输入 654 的这段代码会产生输出:

    while (c != '\n'){
        c = getchar();
        convertedInt = c - '0';
        printf("%d\n", convertedInt);
    }

    //Output
    4
    5
    6
    -38

我认为它与 getchar 没有任何关系,因为如果我只是打印 char 而不转换它,我会得到预期的输出。

最佳答案

您正在阅读角色之前进行测试。试试这个:

int c;
while ((c = getchar()) != '\n' && c != EOF) {
    convertedInt = c - '0';
    printf("%d\n", convertedInt);
}

请注意,如果发生错误,或者用户通过键盘发出 EOF 信号,getchar() 可以返回 EOF,并且因此应该测试 c 的值以避免可能的无限循环。

在问题的代码中,while语句的控制表达式似乎第一次测试了c未初始化的值。这会导致未定义的行为。后来读取并打印最后一位数字时,再次测试c,发现不是\n。然后调用 getchar(),并且 c 的值为 10,即 ASCII 换行符的十进制值。因此,convertedInt 获取值 10 - 48-38。然后对c进行最后一次测试;现在它等于\n,并且循环终止。

关于使用 getchar() 额外数字将 char 转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42172212/

相关文章:

java - 将 UTF-8 编码的字符串转换为人类可读的字符串

c - 具有巨大数字的基本数学运算

c - 两个条件如何在 if-ifelse-else 语句中起作用?

c - 类型转换 void 指针并分配内存

javascript - 删除键的 ASCII 键代码错误

Bash:带有表示字符的变量的 tr 命令

将 ASCII 字符转换为 x11 键码

在 C 中计算数组大小

c - 如何存储多个数组并制作指向它们的指针数组

c# - 如何在 Visual Studio 中打开特殊的 Ascii 字符?