当我想弄清楚getchar()实际上是做什么的时候,这一小块loop确实让我感到困惑。
int i;
int c;
for (i = 0; i < 100; i++) {
c = getchar();
printf("%d\n", c);
printf("i is %d\n", i);
}投入和产出是:
input: 1
output:
49
i is 0
10
i is 1
input: 12
output:
49
i is 2
50
i is 3
10
i is 4如前所述,如果输入1个字符,getchar()应该将其提取出来,putchar()将打印出来,然后程序移到下一个循环并等待我的下一个输入。但结果似乎表明,代码不像我想象的那样起作用:
10,这个10是什么意思?如果它的意思是EOF,为什么在循环中用c = (getchar() != EOF);替换c = getchar();之后,代码总是打印1,正如我所设想的,应该在最后一个循环中打印一个0?太棒了!
发布于 2013-03-24 15:33:59
问题 输出数字是什么意思?
输出数字根据字符集表示字符的值,通常基于ASCII (一些大型机也使用EDCDIC)。
C11 (n1570),§5.2.1字符集 应该定义两组字符及其相关的排序序列:写入源文件的集合(源字符集)和在执行环境中解释的集(执行字符集)。每个集合被进一步划分为一个基本字符集(其内容由这个子子句提供)和一组零或多个特定于地区的成员(它们不是基本字符集的成员),称为扩展字符。组合集也称为扩展字符集。执行字符集成员的值是实现定义的。
因此,通过这个字符编码,49是字符'1',50是字符'2'。
问题 总是有一个额外的循环打印10,这10意味着什么?
对于ASCII字符集,10是行提要字符'\n'。
当您在键盘上键入字符'1'时,标准输入流stdin实际上会接收两个字符:'1'和'\n',因为您正在按<Enter>来验证输入。
因此,一旦完成了getchar调用,就应该清除标准输入流。实现这一目标的一种可能方法是使用所有字符,直到到达换行符或EOF为止。
#include <stdio.h>
int c;
while ((c = getchar()) != '\n' && c != EOF)
;在BSD上,也有函数fpurge,而在Solaris和GNU上,__fpurge是可用的。
问题 如果它的意思是
EOF,为什么在循环中用c = (getchar() != EOF);替换c = getchar();之后,代码总是打印1,正如我所设想的,应该在最后一个循环中打印一个0?
EOF的值不能是10,因为EOF必须有一个负值。
C11 (n1570),§7.21.1导言
EOF,它扩展为整数常量表达式,具有int类型和负值.
发布于 2013-03-24 15:36:01
输出数字是什么意思?
字符getchar()的字符代码返回,因为您获得了一个字符代码,并且使用%d说明符打印它。在这种情况下,您的字符编码似乎是ASCII或UTF-8,所以1代表49,2代表50,等等。
2:.太长了不能引用..。
10是换行符('\n')的ASCII和Unicode代码。由于您按Enter (getchar()等待它!),您的将得到发送到终端的输入字符。
https://stackoverflow.com/questions/15600349
复制相似问题