【发布时间】:2020-02-05 19:34:40
【问题描述】:
我编写了一个简单的程序来输入一个数字并返回任何值,除以该数字将返回 3 的余数。
我目前正在阅读 K&R,它直到第 7 章才教授 scanf,所以我尝试使用 getchar。它不起作用,但 scanf 可以。我做错了什么?
int main()
{
int c, i;
printf("Input an integer: ");
//c = getchar();
scanf("%d", &c);
for (i = 1; i <= 100; i++) {
if ((i % c) == 3) {
printf("%d\n", i);
}
}
return 0;
}
可选的附带问题:这里的人们似乎一直建议不要从 K&R 开始。对于初学者来说,什么是更好的选择?
【问题讨论】:
-
您输入的不是整数。您正在输入单个字符。
-
那是因为他们做不同的工作。当您使用
scanf输入3 时,您会得到值3,而使用getchar您会收到字符'3',它在ASCII 编码中是值51。 -
getchar读取单个八位字节,但它返回一个 int 以便它可以返回一个值来指示何时没有读取数据。也就是说,它只能返回一个介于 0 和 255 之间的值。如果你的输入是字符串 '4357',它只会读取4并返回本地字符集中的4的值。 (例如,52 是一个常用的值) -
@WeatherVane 谢谢。这解释了我得到的结果。那么有什么办法可以在这里使用getchar并将其转换为值'3'?
-
此外,它们涵盖了不同的范围:即使为了获得整数进行了一些奇怪的转换,使用 getchar() 最多可以获得 255 的值。使用 scanf 可以获得有符号整数。跨度>