我想将 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/